java eclipse,布尔值出错

时间:2014-03-04 06:26:34

标签: java eclipse boolean

我有两个在Main.java上运行的线程和一个布尔字段Main.bool,它在开头是假的。 第一个线程将Main.bool设置为true。 之后,第二个帖子将打印出Main.bool。结果是 FALSE

更有趣的是,我尝试在打印Main.bool之前打印出一个随机文本,然后结果证明是正确的(true)。

任何人都知道这里发生了什么?我正在使用eclipse开普勒。

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

2 个答案:

答案 0 :(得分:0)

让你的'bool'变得不稳定。

对volatile变量的任何写入都会建立与之后读取相同变量的先发生关系

了解更多info

注意:使字段变为volatile,确保正在读取该字段值的任何人从内存而不是本地副本中读取它。

答案 1 :(得分:0)

表格JLS-8.3.1.4

  

Java编程语言提供了第二种机制volatile字段,比某些用途的锁定更方便。

     

字段可以声明为volatile,在这种情况下,Java Memory Model可以确保所有线程都看到变量的一致值

有关详细信息,请参阅:

  1. Atomic Access
  2. What are Transient and Volatile Modifiers