Java 在swing worker中,是否可以终止线程?
我使用swing worker线程以后台模式加载数据。下面是例行程序的简化版本。重要的一点是,work2会一直保存对象,直到线程完成,然后work2会得到一个空值 我可能期望垃圾收集删除线程,但我在调试器中看到SwingWorker-pool-1-thread-1-running。从我的观点来看,我不再使用该线程,因为加载已经完成 我最好还是忽略线程仍在运行这一事实,但我还是想问一下。是否需要显式终止线程?我还没有寻找显式命令来实现这一点,因为我习惯于将对象设置为null,一旦没有更多的引用,Java就会为我杀死一些东西 那么,最好的建议是什么?杀了它还是忽略它 谢谢, 宜兰Java 在swing worker中,是否可以终止线程?,java,swingworker,Java,Swingworker,我使用swing worker线程以后台模式加载数据。下面是例行程序的简化版本。重要的一点是,work2会一直保存对象,直到线程完成,然后work2会得到一个空值 我可能期望垃圾收集删除线程,但我在调试器中看到SwingWorker-pool-1-thread-1-running。从我的观点来看,我不再使用该线程,因为加载已经完成 我最好还是忽略线程仍在运行这一事实,但我还是想问一下。是否需要显式终止线程?我还没有寻找显式命令来实现这一点,因为我习惯于将对象设置为null,一旦没有更多的引用,J
protectedvoid LoadData(PetCtFrame par1,ArrayList imgList,ArrayListseriesType){
work2=新的bkgdLoadData();
工作2.addPropertyChangeListener(新的PropertyChangeListener(){
@凌驾
公共作废属性更改(属性更改事件evt){
字符串propertyName=evt.getPropertyName();
if(propertyName.equals(“state”)){
SwingWorker.StateValue状态=(SwingWorker.StateValue)evt.getNewValue();
if(state==SwingWorker.StateValue.DONE){
work2=null;
}
}
}
});
work2.execute();
}
首次使用SwingWorker
后,其池将被初始化,通常无需对其进行管理
至于您提到的垃圾收集,这与线程管理无关。
Thread
对象不是线程,它只是一个句柄对象,允许您启动和管理执行线程的生命周期。只要底层线程启动,线程
实例就可以作为线程.currentThread()
静态访问,因此只要线程处于活动状态,实例就不会进行垃圾收集。SwingWorker被指定用于Swing/和/或dirty hack将初始化EDT
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();
}