一、volatile概述 volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址(内存)中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出 ...
分类:
其他好文 时间:
2017-07-21 23:23:15
阅读次数:
263
阅读目录 synchronized同步块 volatile同步变量 阅读目录 synchronized同步块 volatile同步变量 Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较 ...
分类:
其他好文 时间:
2017-07-16 23:26:22
阅读次数:
198
volatile 在多线程并发编程中synchronized和volatile都扮演着重要的角色,volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性"。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果volatile变量修饰... ...
分类:
其他好文 时间:
2017-07-08 14:38:21
阅读次数:
143
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份.下面是volatile变量的几个例子: 1).并行设备的硬件寄存器(如:状态寄存器) 2 ...
分类:
其他好文 时间:
2017-06-22 01:17:23
阅读次数:
121
以下内容转自http://tutorials.jenkov.com/java-concurrency/volatile.html(使用谷歌翻译): Java volatile关键字用于将Java变量标记为“存储在主存储器”中。更准确地说,这意味着,每个读取volatile变量将从计算机的主存储器中读 ...
分类:
编程语言 时间:
2017-06-16 10:24:43
阅读次数:
260
摘要 Volatile是Java提供的一种弱同步机制,当一个变量被声明成volatile类型后编译器不会将该变量的操作与其他内存操作进行重排序。在某些场景下使用volatile代替锁可以减少代码量和使代码更易阅读。 Volatile特性 1.可见性:当一条线程对volatile变量进行了修改操作时, ...
分类:
编程语言 时间:
2017-06-06 14:17:13
阅读次数:
155
volatile变量,用来确保将变量的更新操作通知到其他线程,volatile变量的操作必须是原子性的,如果不是原子性的则变量内存可见性会出现意想不到的异常。在代码中如果依赖volatile变量来控制状态的可见性,其很可能比使用synchroized锁更脆弱,也更难理解。 仅当volatile变量能 ...
分类:
其他好文 时间:
2017-06-05 10:23:27
阅读次数:
178
指令重排的基本原则: a.程序顺序原则:一个线程内保证语义的串行性 b.volatile规则:volatile变量的写,先发生于读 c.锁规则:解锁(unlock)必然发生在随后的加锁(lock)前 d.传递性:A先于B,B先于C 那么A必然先于C e.线程的start方法先于它的每一个动作 f.线 ...
分类:
其他好文 时间:
2017-05-30 15:59:10
阅读次数:
401
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17382679 在《Java并发编程学习笔记之五:volatile变量修饰符—意料之外的问题》一文中遗留了一个问题,就是volatile只修饰了missedIt变量,而没修饰value变量,但 ...
分类:
编程语言 时间:
2017-05-30 13:28:05
阅读次数:
295
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17290021 在http://blog.csdn.net/ns_code/article/details/17288243这篇博文中,讲述了通过同步实现内存可见性的方法,在http://bl ...
分类:
编程语言 时间:
2017-05-30 13:10:54
阅读次数:
177