前两天面试,面试官问到一个问题,说如何结束掉一个线程。我们都知道线程自带的有结束的方法stop,可是面试官会问这么浅显的东西吗?所以当时我没敢说话(当时一起面的四个人,我是其中之一),其中有一个就说线程类自己提供的有结束的方法。结果可想而知,说了等于白说。今天想来来,专门查了下,发现这个答案应该是当时面试官期望的答案。
设置一个标志,让其自动return最安全。
public class T {
public static void main(String[] args) {
// 启动线程
MyThread thread = new MyThread();
new Thread(thread).start();
// 你的其它的工作,此时线程在运行中
// 你不想让线程干活了,停掉它
// 注意,这只是一个标志,具体线程何时停,并不能精确控制
thread.allDone = true;
}
}
class MyThread implements Runnable {
boolean volatile allDone = false;
public void run() {
// 每次循环都检测标志
// 如果设置停止标志时已经在循环里
// 则最长需要等待一个循环的时间才能终止
while (!allDone) {
// 循环里的工作
}
}
}
修正,增加了 volatile 关键字,避免多个CPU出问题。