首页 新闻 搜索 专区 学院

java中static变量和volatile变量的可见性有什么区别?

0
[待解决问题]

public class Test {

static Boolean flag = true;

public static void main(String[] args) throws InterruptedException {

    Thread thread1 = new Thread(() -> {
        int a = 0;
        while (true) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(a++ + flag.toString());
        }
    });

    Thread thread2 = new Thread(()->{
        while (true){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            flag = !flag;
        }
    });

    thread1.start();
    thread2.start();
}

}

无论是否加volatile关键字,thread2对flag变量的修改对thread1始终都是可见的。

.SegmentFault的主页 .SegmentFault | 菜鸟二级 | 园豆:202
提问于:2020-12-05 23:51
< >
分享
所有回答(2)
0
2012 | 园豆:20846 (高人七级) | 2020-12-06 11:01
0

static是让类的所有实例对象 共享 类的属性或者方法,理解为“可见性”不太准确,应该理解为“共享”;
volatile是Java内存模型里面的可见性;

寻觅beyond | 园豆:863 (小虾三级) | 2020-12-06 22:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册