繁体   English   中英

在秋千工人中,可以杀死线程吗?

[英]In a swing worker is it possible to kill the thread?

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

首次使用SwingWorker ,便会初始化其池,通常无需对其进行管理。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM