Java并发编程下变量可见行分析

Linux大全评论711 views阅读模式

我们先看下面一个Java并发编程下变量可见行示例

public class RaceCondition { 
private static boolean done; 
 
public static void main(final String[] args) throws InterruptedException { 
    new Thread(new Runnable() { 
        public void run() { 
            int i = 0; 
            while (!done) { 
                i++; 
            } 
            System.out.println("Done!"); 
        } 
    }).start(); 
    System.out.println("OS: " + System.getProperty("os.name")); 
    Thread.sleep(2000); 
    done = true; 
    System.out.println("flag done set to true"); 

在Ubutun双核cpu下,默认不加任何jvm参数执行

输出如下: 主线程执行完之后,子线程一直在执行,为什么子线程没有获取到主线程修改done之后的变量值呢?

Java并发编程下变量可见行分析

我们再设置下jvm的参数为 -client,则子线程能够获取主线程修改done之后的值,正常执行完

企鹅博客
  • 本文由 发表于 2019年8月25日 01:55:50
  • 转载请务必保留本文链接:https://www.qieseo.com/176755.html

发表评论