Java多線程中notifyAll()方法使用

小云
84
2023-08-05 18:23:59
欄目: 編程語言

在Java多線程中,notifyAll()方法用于喚醒所有正在等待該對(duì)象的線程。具體使用方法如下:

  1. 在需要等待的線程中,使用wait()方法使線程進(jìn)入等待狀態(tài)。
synchronized(obj) {
while (condition) {
obj.wait();
}
}
  1. 當(dāng)某個(gè)線程滿足條件時(shí),調(diào)用notifyAll()方法來喚醒所有等待該對(duì)象的線程。
synchronized(obj) {
condition = false;
obj.notifyAll();
}

在調(diào)用notifyAll()方法后,被喚醒的線程會(huì)重新競爭鎖,然后繼續(xù)執(zhí)行。注意,notifyAll()方法只會(huì)喚醒正在等待該對(duì)象的線程,不會(huì)釋放鎖。因此,被喚醒的線程仍然需要等待鎖被釋放才能繼續(xù)執(zhí)行。

需要注意的是,notifyAll()方法是Object類中的方法,因此任何對(duì)象都可以調(diào)用該方法。但是,只有在同一個(gè)對(duì)象的監(jiān)視器上等待的線程才能被喚醒。

0