在一个摇摆工人可以杀死线程?

时间:2013-08-26 08:28:46

标签: java swingworker

我使用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();
}

1 个答案:

答案 0 :(得分:0)

首次使用SwingWorker时,会初始化其池,通常无需管理它。

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