欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

volatitle 不具有原子性代码

程序员文章站 2022-03-03 16:14:18
...
public class TestVolatitle_1 {
    public  volatile static   int  j;
    public int  add (){

        synchronized (TestVolatitle_1.class){
            return j++;
        }
    }

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

        TestVolatitle_1 testVolatitle_1 = new TestVolatitle_1();
        for (int i = 0; i < 100; i++) {
            new Thread(){
                @Override
                public void  run() {
                   // testVolatitle_1.add();
                    /*synchronized (TestVolatitle_1.class){
                        j++;
                    }*/
                    for (int k = 0; k < 2000; k++) {
                        j++ ;
                    }


                }
            }.start();
        }
        Thread.sleep(3000);
       // System.out.println(testVolatitle_1.j);
        System.out.println(j);
    }

}

最终输出结果   197238

执行的程序加上代码块 执行正常

  synchronized (TestVolatitle_1.class){
                        for (int k = 0; k < 2000; k++) {
                            j++ ;
                        }
                    }