我有一個線程必須等待來自不同線程的多個對象。如何等待幾個對象
@Override
public void run() {
while (true) {
for (BackgroundTask task : tasks) {
synchronized (task) {
if (task.isReady()) {
task.doTask();
}
}
}
}
}
但它是一個愚蠢的使用CPU時間。 如何等待幾個對象?
據我所知,notifyAll()只喚醒所有等待線程中的一個對象。我需要在一個線程中等待幾個對象。 – itun 2011-03-28 14:16:07
@itun線程的等待是完全串行的。也就是說,在任何給定的時間只有一個線程可以等待一個對象(監視器)。這違反了您正在查找的功能類型,並且不可用。 – 2011-03-28 14:18:40
等待並通知有幾個警告(例如線程在通知未被調用時被喚醒)。您應該使用更高級別的組件,例如BlockingQueue或CountDownLatch。 – 2011-03-28 14:28:13