volatile让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存”。volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正确性”,也就是说不保证线程执行的有序性。也就是说,volatile变量对于每次使用,线程都能得到当前v...
分类:
编程语言 时间:
2014-08-22 22:21:49
阅读次数:
250
Java语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了
实现代码线程的安全性。Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized
块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。...
分类:
编程语言 时间:
2014-08-01 00:02:10
阅读次数:
237
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatil...
分类:
其他好文 时间:
2014-07-28 15:23:03
阅读次数:
172
1.如何停止一个正在运行的线程?使用共享变量,用volatile变量修饰,线程循环去访问该变量。如果线程因为发生某些事件进行阻塞,可以使用Thread的interrupt方法。可以使一个被阻塞的线程抛出一个中断异常,从而使线程提前结束阻塞状态,退出堵塞代码。class MyThread extend...
分类:
编程语言 时间:
2014-07-26 01:39:26
阅读次数:
263
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) ...
分类:
其他好文 时间:
2014-07-16 17:49:25
阅读次数:
190
背景大家都知道线程之间共享变量要用volatilekeyword。可是,假设不用volatile来标识,会不会导致线程死循环?比方以下的伪代码:static int flag = -1;void thread1(){ while(flag > 0){ //wait or do somethi...
分类:
编程语言 时间:
2014-07-09 00:33:01
阅读次数:
263
背景
大家都知道线程之间共享变量要用volatile关键字。但是,如果不用volatile来标识,会不会导致线程死循环?比如下面的伪代码:
static int flag = -1;
void thread1(){
while(flag > 0){
//wait or do something
}
}
void thread2(){
//do something
f...
分类:
编程语言 时间:
2014-05-25 10:24:14
阅读次数:
220
volatile 影响编译器编译的结果,指出,volatile
变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++
在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。例如:volatile ...
分类:
其他好文 时间:
2014-05-11 23:27:27
阅读次数:
404