我有一个带有swing GUI的程序,我想在我的一个JFrame被丢弃时中断一个线程。有快速的方法吗?这是我第一次使用并发。
答案 0 :(得分:1)
是的,您可以执行以下操作:
创建一个JFrame子类并覆盖dispose()方法:
class MyFrame extends JFrame{
private Thread otherThread;
public MyFrame(Thread otherThread){
super("MyFrame");
this.otherThread=otherThread;
}
...
public void dispose(){
otherThread.interrupt();
super.dispose();
}
}
但是,请注意不建议使用Thread.interrupt(),因为实际上无法控制线程在哪个状态中断。
因此,最好为您自己的Thread(或Runnable)子类手动维护一个'interrupt'标志,让Thread在其认为合适时停止工作。
例如:
class MyThread extends Thread{
private boolean interrupted=false;
public void interruptMyThread(){
interrupted=true;
}
public void run(){
while(true){
// ... some work the thread does
// ... a point in the thread where it's safe
// to stop...
if(interrupted){
break;
}
}
}
}
然后,不要在MyFrame中使用线程引用,而是使用MyThread引用,而不是调用otherThread.interrupt()
,而是调用otherThread.interruptMyThread()
。
因此,最终的MyFrame类看起来像:
class MyFrame extends JFrame{
private MyThread otherThread;
public MyFrame(MyThread otherThread){
super("MyFrame");
this.otherThread=otherThread;
}
...
public void dispose(){
otherThread.interruptMyThread();
super.dispose();
}
}