![](/img/trans.png)
[英]How to end the processing of other threads when one thread completes in java
[英]How to “try start” one thread from several other threads, java
我在我的函数中写了这个:
if(myThread.isAlive()) {
} else {
myThread.start();
}
但如果许多线程同时调用此函数,则这是不安全的。 启动一个正在运行的线程抛出异常。
所以除了把try-catch放在它周围,我还有其他选择吗?
使此方法同步。 此外,此检查( isAlive()
)是不安全的,因为如果线程已经完成,则无法再次启动它( isAlive()
将返回false ...)
我打算在我打算启动时创建线程。
你能做的是
synchronized(thread) {
if(thread.getState() == Thread.State.NEW)
thread.start();
}
已完成的线程将不会存活,但无法重新启动。
相反,每个人都可以告诉:不要使用isAvile()或getState(),都要求将它们执行为同步。 阻止w / thread.start()并要求线程实际上将自己用作监视器(事实上它是这样做的)
相反,只是捕获start()的异常( IllegalThreadStateException
)并忽略它。
try{
thread.start()
}catch(IllegalThreadStateException _x){
//ignore or log the reason, use getState(), if need be
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.