【发布时间】:2014-03-04 06:26:33
【问题描述】:
我在 Main.java 和一个布尔字段 Main.bool 上运行了两个线程,该字段在开始时为 false。 第一个线程将 Main.bool 设置为 true。 之后,第二个线程将打印出 Main.bool。结果是FALSE。
更有趣的是,我尝试在打印 Main.bool 之前打印出一个随机文本,结果结果是正确的(true)。
有人知道这里发生了什么吗?我正在使用日食开普勒。
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
【问题讨论】:
-
让你的领域
volatile。 -
在处理多线程时使用 volatile 字段使其同步
-
当您有多个线程时,无法保证线程执行的顺序。它们将以任意方式轮换执行。因此,thread2 可能会在 thread1 更改值之前打印出布尔值。
-
不,不是,我确保线程 1 发生在线程 2 之前。