停止一个线程的最佳方法是让它执行完毕,没有办法立即停止一个线程,但你可以控制何时或什么条件下让他执行完毕。
通过条件变量控制线程的执行,线程内部检查变量状态,外部改变变量值可控制停止执行。为保证线程间的即时通信,需要使用volatile关键字或锁,确保读线程与写线程变量状态的一致性。
pubic class BestPractice extends Thread {
private volatile boolean finished = false; // 1, volatile条件变量
public void stopMe() {
finished = true; //2,发出停止信号
}
@Override
public void run() {
while (!finished) { //3,检查条件变量
// do dirty work //4,业务代码
}
}
}
当4处的代码阻塞于wait()或sleep()时,线程不能立刻检测到条件变量。
因此2处的代码最好同时调用interrupt()方法。