2013-08-26 31 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()靜態訪問,因此只要線程處於活動狀態,實例就不會進行垃圾收集。