我在面试中遇到过这个问题,面试官要求我在这段代码中找到错误。
public class Thread1 {
private static boolean interruptedTask=false;
private static class MyClass extends Thread{
public void run(){
while(!interruptedTask){
//Do some time consuming task for more than 5 secs
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread task=new MyClass();
task.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
interruptedTask=true;
try {
task.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我猜的唯一错误的部分是interruptTask变量应该是volatile,因为它在多个线程中使用。
请建议。
答案 0 :(得分:3)
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
interruptedTask=true;
我在这里看到的是,即使你只等待5000毫秒,你也总是将interruptedTask设置为true。您应该考虑将最后一行放在catch块中以获得我假设的预期行为。