好吧,我在面试中被问到了这个多线程问题。问题是这样的
public class Job {
static boolean interruptTask = false;
private static class Mytask extends Thread{
@Override
public void run() {
while(!interruptTask){
//do some time consuming thing until interruption like looping over millions of times
}
}
}
public static void main(String[] args) throws InterruptedException {
Mytask t = new Mytask();
t.run();
Thread.sleep(1000);
interruptTask=true;
t.join();
System.out.println("end");
}
}
问题陈述
此代码片段有什么问题以及您将如何修复它。
我能够在这里找出问题所在。我认为问题在于,即使我们在主函数中将interrupttask变量设置为true,它也不会中断线程。该线程将继续执行,直到其长时间执行尚未结束。
但是我不知道这个问题的解决方案?我的意思是,我们有线程的等待、通知等工具,但我不知道我们可以在这里使用这些工具。在这种情况下应该采取什么方法来解决这个特定问题?
谁能帮我解决这个问题吗?或者关于我应该如何寻求解决方案的一些指导?
最佳答案
有两个问题:
t.run()
应为t.start()
。否则,您将在单线程中执行这两项任务。interruptTask
应该是volatile
或者应该通过synchronized
getter/setter来访问。否则,Java 可以假设只有一个线程正在使用该字段并进行优化:while(!interruptTask){ // something }
进入:
if(!interruptTask){ while(true){ // something } }
关于java - 如何解决这种多任务场景中任务长时间中断的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25471810/