volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatil ...
分类:
其他好文 时间:
2017-03-10 12:24:00
阅读次数:
121
本文是基于对 http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 这篇文档的理解 volatile 用volatile修饰的变量,线程在每次使用变量的时候,都会读取主内存也就是堆内存中最新值。 解读下面代码运行结果为什么可能 ...
分类:
其他好文 时间:
2017-03-05 19:08:57
阅读次数:
143
转自:http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字 ...
分类:
编程语言 时间:
2017-02-27 17:48:56
阅读次数:
223
volatile用处说明 首先明确一点: 假如有两个线程分别读写volatile变量时,线程A写入了某volatile变量,线程B在读取该volatile变量时,便能看到线程A对该volatile变量的写入操作,关键在这里,它不仅会看到对该volatile变量的写入操作,A线程在写volatile变 ...
分类:
其他好文 时间:
2017-02-25 21:32:09
阅读次数:
159
前言 首先,我们使用多线程的目的在于提高程序的效率,但是如果使用不当,不仅不能提高效率,反而会使程序的性能更低,因为多线程涉及到线程之间的调度、CPU上下文的切换以及包括线程的创建、销毁和同步等等,开销比单线程大,因此需谨慎使用多线程。 在jdk1.5以后,提供了一个强大的java.util.cur ...
分类:
其他好文 时间:
2017-02-13 08:39:25
阅读次数:
146
首先创建一个MyThread类,继承Thread,有一个成员变量flag,重写run方法: 然后,创建Run类,如下: 运行结果如下: 可以看到,程序的运行结果出现了死循环,另一个线程修改了flag的值为false之后,并没有跳出循环,这是因为在执行代码thread.start()启动这个线程时,变 ...
分类:
其他好文 时间:
2017-02-12 13:28:51
阅读次数:
171
static 和final static 静态修饰关键字,可以修饰 变量,程序块,类的方法; 当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这一个地址而不会重新分配内存; 3.1.适用范围: 3.1.2.两者范围的交集,所以只能修饰:成员变量、方法、内部 ...
分类:
编程语言 时间:
2017-02-11 12:49:45
阅读次数:
175
我们都知道 volatile这个关键字,使用它在多线程环境下能保证该变量的内存可见性;这是如何实现的呢?Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。如果一个字段被声 ...
分类:
其他好文 时间:
2017-02-09 18:46:09
阅读次数:
172
一.前言 1.编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软 ...
分类:
编程语言 时间:
2017-02-09 10:49:15
阅读次数:
220
#volatile [1] volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。声明时语法:int volatile vI ...
分类:
编程语言 时间:
2017-01-25 11:33:50
阅读次数:
483