Singleton 只能有一个实例;必须自己创建自己的实例;必须给其他所有对象提供这一实例 实现方法 饿汉式singleton 预先加载法 class Single { private Single() { System.out.println("ok"); } private static Sin ...
分类:
编程语言 时间:
2017-11-01 10:20:23
阅读次数:
217
valitile修饰的变量不允许线程内缓存以及重排序,它会直接修改主内存,每次使用前立即从主内存刷新,这样保证读到的都是最新的。但是只能保证变量的可见性,不能保证原子性(非原子操作不能保证线程安全),即存在线程安全问题 volatile 其本身包含“禁止指令重排序”的语义 synchronized ...
分类:
其他好文 时间:
2017-10-10 17:50:19
阅读次数:
218
转载自于:http://my.oschina.net/004/blog/222069?fromerr=ER2mp62C 指令重排序是个比较复杂、觉得有些不可思议的问题,同样是先以例子开头(建议大家跑下例子,这是实实在在可以重现的,重排序的概率还是挺高的),有个感性的认识 例子比较简单,也添加了注释, ...
分类:
编程语言 时间:
2017-09-27 17:42:20
阅读次数:
203
一、解决方案 004-线程同步问题引出、同步问题解决、死锁、生产者与消费者 通过以上文章可知,通过原子性AtomicLong 、以及内部锁(synchronized)机制可以解决线程安全问题。以下是一些高级用法。 1、回顾synchronized : 核心类库包含一个 Thread 类,可以用它来构 ...
分类:
编程语言 时间:
2017-09-26 23:38:58
阅读次数:
340
原文出处: 海子 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件 ...
分类:
编程语言 时间:
2017-09-26 16:04:05
阅读次数:
235
Java并发编程 Volatile关键字解析 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序。 ...
分类:
编程语言 时间:
2017-09-19 21:12:06
阅读次数:
247
笔者认为看完一本书或刚要了解完一个知识点 最好自己先运行一些DEMO 自己尝试着去了解下各种意思 这样知识点最终一定是你的。靠死记硬背的讨论或简单的粗暴的看下资料 脑子里肯定还是一团浆糊。 public class FinalDemo { // FinalDemo finalDemo; // pub ...
分类:
编程语言 时间:
2017-06-27 20:02:30
阅读次数:
163
在理解volotile关键字的作用之前,先粗略解释下内存可见性与指令重排序。 1. 内存可见性 Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存,并且线程只能访问自己的工作内存,不可以访问其它线程的工作内存。工作内存中保存了主内存中共享变量的副本,线程要 ...
分类:
编程语言 时间:
2017-06-23 23:05:00
阅读次数:
253
并发简史 早期的计算机没有操作系统,它们从头到尾只能单独执行一个程序,改程序独占所有资源,由于当时计算机资源比较稀缺和昂贵,所以存在着大量的资源浪费。操作系统的出现改变了这一现状,它让各个程序在独立的进程中运行,为各个独立运行的进程分配各种资源。 之所以提供操作系统来实现多个程序同时执行,主要基于以 ...
分类:
其他好文 时间:
2017-06-11 20:19:38
阅读次数:
132
1. 前言 单例(Singleton)应该是开发者们最熟悉的设计模式了,并且好像也是最容易实现的——基本上每个开发者都能够随手写出——但是,真的是这样吗? 作为一个Java开发者,也许你觉得自己对单例模式的了解已经足够多了。我并不想危言耸听说一定还有你不知道的——毕竟我自己的了解也的确有限,但究竟你 ...
分类:
编程语言 时间:
2017-06-09 15:16:02
阅读次数:
230