コード:二つの質問(通知使用)方法
public class NotifyAndWaitTest2 implements Runnable {
public int i = 0;
public Object lock;
public SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
public NotifyAndWaitTest2(Object o) {
this.lock = o;
}
@Override
public void run() {
synchronized (lock) {
System.out.println(Thread.currentThread().getName() + " enter the SYNCHRONIZED block --- "+ sdf.format(new Date()));
try {
while (i < 9) {
Thread.sleep(500);
lock.notify();
lock.wait();
System.out.println(Thread.currentThread().getName() + " say:" + i++ + " --- " + sdf.format(new Date()));
}
lock.notify();
return;
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Object lock = new Object();
NotifyAndWaitTest2 test = new NotifyAndWaitTest2(lock);
Thread t1 = new Thread(test,"Thread A");
Thread t2 = new Thread(test,"Thread B");
Thread t3 = new Thread(test,"Thread C");
Thread t4 = new Thread(test,"Thread D");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
結果:
Thread A enter the SYNCHRONIZED block --- 10:47:07.242
Thread B enter the SYNCHRONIZED block --- 10:47:07.743
Thread C enter the SYNCHRONIZED block --- 10:47:08.243
Thread D enter the SYNCHRONIZED block --- 10:47:08.743
Thread C say:0 --- 10:47:09.243
Thread D say:1 --- 10:47:09.744
Thread C say:2 --- 10:47:10.244
Thread D say:3 --- 10:47:10.744
Thread C say:4 --- 10:47:11.245
Thread D say:5 --- 10:47:11.745
Thread C say:6 --- 10:47:12.246
Thread D say:7 --- 10:47:12.746
Thread C say:8 --- 10:47:13.247
Thread D say:9 --- 10:47:13.247
Thread B say:10 --- 10:47:13.247
Thread A say:11 --- 10:47:13.247
コードは両方jdk1.7に同じ結果を実行しjdk1.8。
私の問題:スレッドのCとスレッドDは、スレッドAの代わりに入力している理由は、スレッドAとスレッドBの後
が同期ブロックを入力し、(待機を呼び出す)方法は、iと、スレッド言いますBは言う?シンクブロックの入力優先度は、wait()メソッドを呼び出したスレッドよりも高いですか?なぜ待つだけ()メソッドを呼び出した最新のスレッドを覚ます?通知()メソッドと呼ばれる
スレッドCとスレッドDのように、お互いに通知し、お互いに待って、なぜ他の待ちスレッドではないのですか?スレッドAとスレッドBの
ように私は
Thread A enter the SYNCHRONIZED block
Thread B enter the SYNCHRONIZED block
Thread A say:0
Thread C enter the SYNCHRONIZED block
Thread B say:1
Thread A say:2
Thread D enter the SYNCHRONIZED block
Thread B say:3
Thread C say:4
予想される結果は何ですか? –
@EvgeniyDorofeev質問を再編集しました – PriestM