原文出处: 海子 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件 ...
分类:
编程语言 时间:
2017-09-26 16:04:05
阅读次数:
235
volatile特性 内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。 volatile的使用场景 通过关键字sychronize可以防止多个线程进入同一段代码,在某些特定场景中,volatile相当于一个 ...
分类:
编程语言 时间:
2017-09-24 15:25:03
阅读次数:
255
一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起 ...
分类:
编程语言 时间:
2017-09-24 09:56:37
阅读次数:
191
Java并发编程 Volatile关键字解析 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行指令重排序。 ...
分类:
编程语言 时间:
2017-09-19 21:12:06
阅读次数:
247
一:概念 volatile关键字是一个轻量级的线程同步,它可以保证线程之间对于共享变量的同步,假设有两个线程a和b, 它们都可以访问一个成员变量,当a修改成员变量的值的时候,要保证b也能够取得成员变量最新的值,程序的 内存模型是这样的,程序运行时,成员变量的值被加载到内存中,如果线程a运行时,会把变 ...
分类:
其他好文 时间:
2017-09-16 20:26:16
阅读次数:
100
(1)作用 volatile关键词影响编译器编译的结果,用 volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错 1.告诉编译器不要做任何优化 2.用volatile定义的变量会在程序外被改变,每次都必须从内存中读取,而不能重复使用放在cache或寄存 ...
分类:
其他好文 时间:
2017-09-15 13:42:35
阅读次数:
114
一、Java中的volatile在Java程序中,如果一个变量被volatile关键字修饰,那么这个变量就具有了有序性和可见性。有序性:java语言中提供了synchronized和volatile两个关键字保证线程之间操作的有序性,也就是他可以使CPU指令有序。可见性:当一个线程操作一个被volatile修饰的变..
分类:
其他好文 时间:
2017-09-11 18:22:41
阅读次数:
96
(1)保证可见性:多线程主要围绕可见性和原子性两个特性而展开,使用volatile关键字修饰的变量,保证了其在多线程之间的可见性,即每次读取到volatile变量,一定是最新的数据。 当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取 ...
分类:
其他好文 时间:
2017-09-08 00:09:50
阅读次数:
219
transient是在对象序列化的时候,不参与序列化的字段。 如LinkedList实现了Serializable,其中有变量transient int size = 0; 在Serializable序列化的时候size时不会参与序列化的,如用ObjectOutputStream读取LinkedLi ...
分类:
其他好文 时间:
2017-09-05 17:47:48
阅读次数:
172
1、volatile关键字的作用 一个非常重要的问题,是每个学习、应用多线程的Java程序员都必须掌握的。理解volatile关键字的作用的前提是要理解Java内存模型,这里就不讲Java内存模型了,可以参见第31点,volatile关键字的作用主要有两个: (1)多线程主要围绕可见性和原子性两个特 ...
分类:
编程语言 时间:
2017-09-02 16:54:48
阅读次数:
216