繁体   English   中英

如何“尝试启动”来自其他几个线程的一个线程,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM