0

我使用摆动工作线程在后台模式下加载数据。该例程的简化版本如下。重要的部分是 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();
}
4

1 回答 1

0

一旦SwingWorker第一次使用 a ,它的池就会被初始化,通常不需要管理它。

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

于 2013-08-26T08:38:41.263 回答