如何优雅地停止Java线程?
我写了一个线程,它花费太多时间执行,而且似乎还没有完全完成。我想优雅地停止线程。有什么帮助吗?
回答:
做到这一点的好方法是让run()
一个线程保护一个Thread的boolean
变量,并true
在你要停止它的时候将其设置为外部变量,例如:
`class MyThread extends Thread
{
volatile boolean finished = false;
public void stopMe()
{
finished = true;
}
public void run()
{
while (!finished)
{
//do dirty work
}
}
}`
曾有一种stop()
方法存在,但正如文档所述
这种方法本质上是不安全的。使用Thread.stop停止线程会导致它解锁所有已锁定的监视器(由于未经检查的ThreadDeath异常会在堆栈中传播)。如果先前由这些监视器保护的任何对象处于不一致状态,则损坏的对象将变为其他线程可见,从而可能导致任意行为。
那就是为什么你应该有个警卫。
以上是 如何优雅地停止Java线程? 的全部内容, 来源链接: utcz.com/qa/418013.html