做到这一点的好方法是让
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异常会在堆栈中传播)。如果先前由这些监视器保护的任何对象处于不一致状态,则损坏的对象将变为其他线程可见,从而可能导致任意行为。
那就是为什么你应该有个警卫。



