java eclipse,布尔值出错

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:

  • 原子存取
  • 瞬态和挥发性修饰物

  • 把布尔的档案变成挥发性。

    任何书写一个不稳定的变量建立一个事件之前——在与同一个变量的读者的关系之前

    更多信息

    注:使场挥发性,使任何人读到从记忆而不是从本地拷贝中读到的场挥发性值。