2013-08-26 30 views
0

我使用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

SwingWorker被指定用于Swing /或者脏窍门是初始化EDT – mKorbel

回答

0

一旦SwingWorker首次使用,它的池被初始化,通常没有必要去管理它。

至于你提到的垃圾收集,这与线程管理无关。 Thread对象不是线程,它只是一个句柄对象,它允许您启动和管理执行线程的生命周期。只要底层线程启动,Thread实例就可以作为Thread.currentThread()静态访问,因此只要线程处于活动状态,实例就不会进行垃圾收集。