如何优雅地停止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

回到顶部