猿问

java并发问题

 public class Apple {    public int a = 0;    public Apple() {        for (int i = 0; i < 50000; i++) {
            a = i;
        }
    }
}public class SimpleCounter {
    Apple apple;//   volatile Apple apple;

    public void setApple() {
        apple = new Apple();
    }    public Apple getApple() {        while (true) {            if (null != apple) {                return apple;
            }
        }
    }
}@RunWith(ConcurrentTestRunner.class)public class TestSimpleCounter {    private SimpleCounter simpleCounter = new SimpleCounter();    @Test
    public void testSetApple() {
        simpleCounter.setApple();
    }    @Test
    public void testGetApple() {
        System.out.println(simpleCounter.getApple().a);
    }
}

为什么上述代码不能停止运行,改成volatile就可以,测试框架用的concurrent-junit。


MMTTMM
浏览 406回答 1
1回答

皈依舞

大概是内存可见性问题什么都不做(不volatile 不lock 等)时JVM不保证一线程能读到其他线程的写
随时随地看视频慕课网APP

相关分类

Java
我要回答