Rumah > Soal Jawab > teks badan
public class Thread04 {
final Object object = new Object();
Runnable rb4 = new Runnable() {
public void run(){
synchronized (object){
System.out.println("T1 start!");
try {
object.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
object.notify();
System.out.println("T1 end!");
}
}
};
Runnable rb5 = new Runnable() {
public void run(){
synchronized (object){
System.out.println("T2 start!");
object.notify();
System.out.println("T2 end!");
}
}
};
public static void main(String[] args) {
Thread04 th = new Thread04();
new Thread(th.rb4).start();
new Thread(th.rb5).start();
}
}
PHP中文网2017-04-18 10:55:24
objek.notify(); rb5 dipanggil apabila rb4 belum memasuki keadaan menunggu kerana masih menunggu kunci. Permulaan utas tidak bermakna ia akan berjalan() dengan sendirinya serta-merta, yang bermaksud bahawa run() utas yang bermula() selepas ia berkemungkinan akan dilaksanakan terlebih dahulu.
迷茫2017-04-18 10:55:24
rb4
mendapatkan kunci objek object
semasa operasi, mengeluarkan T1 start!
, dan kemudian memanggil wait()
Kaedah ini akan menyebabkan rb4
tergantung, melepaskan kunci dan menyekat pada masa yang sama. Pada masa ini rb5
memperoleh kunci dan mengeluarkan T2 start!
. Kemudian panggil object.notify();
Walaupun rb4
bertujuan untuk dijalankan, kunci rb5
belum dilepaskan, jadi rb4
masih disekat. rb5
Teruskan berjalan dan keluarkan T2 end!
. rb5
Operasi selesai, kunci dilepaskan, rb4
Operasi keluaranT1 end!
.