并发编程中,什么是共享变量?

2020-11-09 15:21发布

问题:

package com.luke.Thread;

public class VolatileDemo002 {
    
    public static void main(String[] args) {
        seeByVolatile();
    }
    
    private static void seeByVolatile(){
         DataNum dn = new DataNum();
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("分线程开始执行");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                dn.num = 60;
                System.out.println("线程修改结束后:"+dn.num);
                
            }
        },"分线程").start();
        
        while(dn.num == 0){
            System.out.println("可见性测试失败");
        }
        
        System.out.println("主线程和分线程都执行结束了");
    }
    
}

class DataNum{
     int num = 0;
}

这段代码本来想证明volatile的可见性,但是这段代码一直证明不了。朋友提示是因为,修改的不是共享变量。

那什么什么是共享变量呢?

回答1:

共享变量的意思就是每个线程都可以访问到的变量,比如:成员变量