我有两个线程运行在Main.java和一个布尔型字段Main.bool,它在开始时为false。 第一个线程将Main.bool设置为true。 之后,第二个线程将打印出Main.bool。结果是FALSE。java日食,布尔值出错
更有趣的是,我在打印Main.bool之前打印出一个随机文本,然后结果证明是正确的(true)。
任何人都知道这里发生了什么?我正在使用eclipse Kepler。
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字段使其同步化 – Kick
当您有多个线程时,不能保证线程执行的顺序。他们将以任意方式执行。因此,在thread1更改值之前,thread2可能会打印出布尔值。 – Solace