以Pausing a Thread为例。如果我使用notifyAll
代替通知,是否有任何副作用,是否有必要?
答案 0 :(得分:6)
在那个例子中,它没有任何区别,因为只有1个线程在等待。
notify
和notifyAll
之间的区别在于后者会唤醒所有服务员,而不只是一个服务员。
答案 1 :(得分:1)
在“ Effective Java”第69项中,Bloch建议“始终使用notifyAll ”。
答案 2 :(得分:0)
如果您可以让多方等待对象,则使用notifyAll而不是notify是很重要的。如果只有一个线程等待,则调用notify与notifyAll之间没有区别。
答案 3 :(得分:-1)
创建一个新的runnable。在run方法中,“start”countdownlatch正在等待并且不允许执行,除非在预定义的时间内使用该锁存器上的调用倒计时释放它。在这种情况下1.(因为start为1并发no)
//修订答案。 //一个可运行的类
public class WorkerThread implements Runnable
{
CountDownLatch start;
CountDownLatch end;
String name;
WorkerThread(CountDownLatch startLatch, CountDownLatch stopLatch)
{
this.start = startLatch;
this.end = stopLatch;
}
public void run()
{
try
{
start.await();
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
System.out.println("Will run when start is released ");
end.countDown();
}
}
//这是执行工作线程的入口点方法。
public void initiateProcess (final int count) {
CountDownLatch start = new CountDownLatch(1);
CountDownLatch stop = new CountDownLatch(count);
for (int i = 0; i < count; i++)
{
new Thread(new WorkerThread(start, stop))
.start();
}
System.out.println("Go");
// This is where start latch is released. Now worked thread can complete its function.
start.countDown();
try
{
// Stop will wait until stop latch is countdowned to zero from count param. (see count param)
stop.await();
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
System.out.println("Finished");
}