如何使用join()
从Thread
类中获取功能Semaphore
?
我的意思是我想等待其他线程。
根据您的问题,我总结出您想要做的事情Thread.join()
不使用Thread.join()
但使用Semaphore
. 我可以想到一些你可能想要这样做的原因,但我觉得你可能只是想使用join()
. 但是,这里有。
让我们join()
从 javadocs 中的内容开始
Waits for this thread to die
我们可以假设这意味着停止运行。好的,所以我们需要一个Semaphore
具有在线程死亡时释放的许可证。让我们假设您可以修改有问题的两个线程,即它们不是最终的。然后,您可以覆盖他们的run
方法,以便第一个在信号量完成时释放信号量,第二个等待信号量在它开始之前被释放,即
final Semaphore sem = new Semaphore(1);
Thread t1 = new MyThreadOne(){
{
try{
sem.acquire();
}
catch(InterruptedException e){ log(...); }
}
@Override
public void run(){
super.run();
sem.release();
}
};
Thread t2 new MyThreadTwo(){
@Override
public void run(){
try{
sem.acquire();
}
catch(InterruptedException e){ log(...); }
super.run();
}
};
t1.start();
t2.start();
如果您的示例需要,您可能希望将信号量传递给构造函数,或者以其他方式访问它。请注意,sem
它必须在final
此处,因为它在匿名内部类中被引用,并且 Java 不能正确执行闭包。