在《java并發(fā)編程實(shí)戰(zhàn)》這本書中有一個(gè)例子
package chapter3;
import java.util.Iterator;
public class NoVisibility {
? ? private static boolean ready;
? ? private static int number;
? ? private static class ReaderThread extends Thread {
? ? ? ? public void run() {
? ? ? ? ? ? while (!ready)
? ? ? ? ? ? ? ? Thread.yield();
? ? ? ? ? ? System.out.println(number);
? ? ? ? }
? ? }
? ? public static void main(String[] args) {
? ? ? ? ? ? new ReaderThread().start();
? ? ? ? ? ? number = 42;
? ? ? ? ? ? ready = true;
? ? }
}
結(jié)果有可能是42,0或者是死循環(huán)。
我只能做出42這種情況。為什么?其它兩種情況沒成功過,加sleep也不會出現(xiàn)。
2018-10-07
你的處理器是多核的,書上是不是寫這是單核處理器的情況?