我使用swing工作线程在后台模式下加载数据。该例程的简化版本如下。重要的部分是work2保存对象,直到线程完成,然后work2获得一个空值。
我可能期望的是删除线程的垃圾收集,但我在调试器中看到SwingWorker-pool-1-thread-1-running。从我的观点来看,由于加载完成,我没有更多地使用该线程。
很可能我最好只是忽略线程仍在运行的事实,但无论如何我想问。是否可以明确地杀死线程?我还没有找到显式命令来执行此操作只是因为我习惯将对象设置为null,并且一旦没有更多引用,Java就会为我杀死。
那么最好的建议是什么?杀掉它还是忽略它?
谢谢, 伊兰
protected void LoadData(PetCtFrame par1, ArrayList<ImagePlus> imgList, ArrayList<Integer>seriesType) {
work2 = new bkgdLoadData();
work2.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
String propertyName = evt.getPropertyName();
if( propertyName.equals("state")) {
SwingWorker.StateValue state = (SwingWorker.StateValue) evt.getNewValue();
if( state == SwingWorker.StateValue.DONE) {
work2 = null;
}
}
}
});
work2.execute();
}
答案 0 :(得分:0)
首次使用SwingWorker
时,会初始化其池,通常无需管理它。
至于你提到垃圾收集,这与线程管理无关。 Thread
对象不是一个线程,它只是一个句柄对象,它允许您启动和管理执行线程的生命周期。一旦启动了底层线程,Thread
实例就可以静态到达Thread.currentThread()
,因此只要线程处于活动状态,实例就不会受到垃圾回收。