文章转自:http://blog.csdn.net/jason0539/article/details/23297037/ 概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。单例模式有以下特点: 1、单例类只能有一个实例。 ...
分类:
其他好文 时间:
2017-06-08 18:57:37
阅读次数:
183
这篇的主题本应该放在最初的几篇。讨论的是并发编程最基础的几个核心概念。可是这几个概念又牵扯到非常多的实际技术。比方Java内存模型。各种锁的实现,volatile的实现。原子变量等等,每个都可以展开写非常多,尤其是Java内存模型,网上已经可以有非常几篇不错的文章,临时不想反复造轮子。这里推荐几篇J ...
分类:
其他好文 时间:
2017-06-08 18:52:16
阅读次数:
191
如果只是读操作,没有写操作,则可以不用加锁,此种情形下,建议变量加上final关键字; 如果有写操作,但是变量的写操作跟当前的值无关联,且与其他的变量也无关联,则可考虑变量加上volatile关键字,同时写操作方法通过synchronized加锁; 如果有写操作,且写操作依赖变量的当前值(如:i++ ...
分类:
编程语言 时间:
2017-06-07 18:49:34
阅读次数:
150
摘要 Volatile是Java提供的一种弱同步机制,当一个变量被声明成volatile类型后编译器不会将该变量的操作与其他内存操作进行重排序。在某些场景下使用volatile代替锁可以减少代码量和使代码更易阅读。 Volatile特性 1.可见性:当一条线程对volatile变量进行了修改操作时, ...
分类:
编程语言 时间:
2017-06-06 14:17:13
阅读次数:
155
原子变量和非阻塞的同步机制 一、锁的劣势 1.在多线程下:锁的挂起和恢复等过程存在着很大的开销(及时现代的jvm会判断何时使用挂起,何时自旋等待) 2.volatile:轻量级别的同步机制,但是不能用于构建原子复合操作 因此:需要有一种方式,在管理线程之间的竞争时有一种粒度更细的方式,类似与vola ...
分类:
编程语言 时间:
2017-06-06 11:58:28
阅读次数:
277
volatile变量,用来确保将变量的更新操作通知到其他线程,volatile变量的操作必须是原子性的,如果不是原子性的则变量内存可见性会出现意想不到的异常。在代码中如果依赖volatile变量来控制状态的可见性,其很可能比使用synchroized锁更脆弱,也更难理解。 仅当volatile变量能 ...
分类:
其他好文 时间:
2017-06-05 10:23:27
阅读次数:
178
volatile有以下作用: 阻止重排序,保证可见性,对于单次读写保证原子性(不包括i++这种复合操作)。 下面分别予以解释。 众所周知(也许有些人不知道),编译器以及CPU会在不影响串行结果的情况下对代码进行重排序,以便加快执行速度。(比如超标量流水线计算) 这在并发执行中会造成一些问题。以单例模 ...
分类:
编程语言 时间:
2017-06-05 00:24:50
阅读次数:
142
volatile, static readonly, double check 直到对象要求产生一个实例才执行实例化;这种方法称为"懒实例化"。懒实例化避免了在应用程序启动时实例化不必要的 singleton。 1. 但是,这种实现的主要缺点是在多线程环境下它是不安全的。如果执行过程的不同线程同时进 ...
分类:
其他好文 时间:
2017-06-04 18:27:17
阅读次数:
145
学过JAVA的人都知道,程序运行过程中的临时数据,都是从外部存储设备调入内存(物理内存)中,再进行读写操作的。而计算机在执行程序时,对程序的每条指令都是在CPU中执行的,而指令的执行,势必涉及到对数据的读写操作。 于是就产生了这样一个问题,CPU指令的执行速度是很快的,但是从内存中读取和写入数据的速 ...
分类:
其他好文 时间:
2017-06-03 15:07:12
阅读次数:
156
1.加锁延迟性的懒汉单例模式 单例对象需要用volatile去修饰,可以保证对象是公用的; 初始化单例对象的方法,需要在方法内部判空后进行加锁再次判断空 new 对象的方式。 优点: 确保单例使用时,不会出现未初始化成功的情况(多线程频发并发去拿单例对象可能会造成对象没有初始化成功但不为null的情 ...
分类:
其他好文 时间:
2017-06-02 17:43:08
阅读次数:
162