java eclipse, boolean value goes wrong
我在main.java和一个布尔字段main.bool上运行了两个线程,这在开始时是假的。第一个线程将把main.bool设置为true。之后,第二个线程将打印出main.bool。结果是错误的。
更有趣的是,我尝试在打印main.bool之前打印出一个随机文本,结果是正确的(真的)。
有人知道这是怎么回事吗?我用的是Eclipse开普勒。
1 2 3 4 5 6 7 8 | Main.bool = false; thread1.setBool(true); // then wait for some seconds // case 1 thread2.printBool(); --> false // case 2 System.out.println("blah blah"); thread2.printBool(); --> true |
Form JLS-8.3.1.4
The Java programming language provides a second mechanism, volatile fields, that is more convenient than locking for some purposes.
A field may be declared volatile, in which case the Java Memory Model ensures that all threads see a consistent value for the variable
For more details see:
把布尔的档案变成挥发性。
任何书写一个不稳定的变量建立一个事件之前——在与同一个变量的读者的关系之前
更多信息
注:使场挥发性,使任何人读到从记忆而不是从本地拷贝中读到的场挥发性值。