我有兩個線程運行在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