知识大全 java的volatile与多线程
Posted 变量
篇首语:弓背霞明剑照霜,秋风走马出咸阳。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 java的volatile与多线程相关的知识,希望对你有一定的参考价值。
Java语言规范中指出 为了获得最佳速度 允许线程保存共享成员变量的私有拷贝 而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比
Volatile修饰的成员变量在每次被线程访问时 都强迫从共享内存中重读该成员变量的值 而且 当成员变量发生变化时 强迫线程将变化值回写到共享内存 这样在任何时刻 两个不同的线程总是看到某个成员变量的同一个值
下面是个例子 恢复注释的任何一处都可以实现同步 就是让程序停下来
Java代码
import ncurrent TimeUnit;
// Broken! How long would you expect this program to run ?
public class StopThread
// private static volatile boolean stopRequested; // value: false
private static boolean stopRequested; // value: false
public static void main(String args) throws InterruptedException
Thread backgroundThread = new Thread(new Runnable()
public synchronized void test ()
@Override
public void run()
int i = ;
while(!stopRequested)
// test();
i++;
);
backgroundThread start();
TimeUnit SECONDS sleep( );
stopRequested = true;
当然最容易理解的是用同步的方法
Java代码
import ncurrent TimeUnit;
// Broken! How long would you expect this program to run ?
public class StopThread
private static boolean stopRequested; // value: false
public static synchronized void requestStop()
stopRequested = true;
public static synchronized boolean stopRequested()
return stopRequested;
public static void main(String args) throws InterruptedException
Thread backgroundThread = new Thread(new Runnable()
@Override
public void run()
int i = ;
while(!stopRequested())
i++;
);
backgroundThread start();
TimeUnit SECONDS sleep( );
requestStop();
cha138/Article/program/Java/gj/201311/27280
相关参考
知识大全 JAVA高级:多核线程-volatile原理与技巧[1]
JAVA高级:多核线程-volatile原理与技巧[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 JAVA高级:多核线程-volatile原理与技巧[2]
JAVA高级:多核线程-volatile原理与技巧[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 JAVA高级:多核线程-volatile原理与技巧[4]
JAVA高级:多核线程-volatile原理与技巧[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
知识大全 JAVA高级:多核线程-volatile原理与技巧[3]
JAVA高级:多核线程-volatile原理与技巧[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
以前一直没在意一直以为volatile修饰了就高枕无忧了但其实不然最简单的一个场景 publicclassCounter publicvolatilestaticintcount=; pub
知识大全 Java 理论与实践: 正确使用 volatile 变量 线程同步
Java理论与实践:正确使用volatile变量线程同步 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
Java多线程初学者指南(6):慎重使用volatile关键字 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来
为什么使用volatile比同步代价更低? 同步的代价主要由其覆蓋范围决定如果可以降低同步的覆蓋范围则可以大幅提升程序性能 而volatile的覆蓋范围仅仅变量级别的因此它的同步代价很低 v
深入解析PHP中的(伪)多线程与多进程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是对P
知识大全 Java理论与实践: 正确使用Volatile变量
Java理论与实践:正确使用Volatile变量 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!