2012-09-08 266 views
2

如果我有這樣的Java代碼:在Java中停止線程

public static void main(String[] args) 
{ 
    for(int i = 0;i<100;i++) 
    { 
     Future<?> f = ThreadPoolManager.getInstance().schedule(new START(), 500); 
     f.cancel(true); 
    } 
} 
private class START implements Runnable 
{ 
    @Override 
    public void run() 
    { 
     System.out.println(1); 
    } 
} 

而且在調試運行它,我可以看到,所有這些線程(後取消)仍在運行的,所以他們在考慮我的記憶太?如果是的話,我怎麼能完全摧毀這些線程?

+0

你確定要摧毀它們嗎? –

+0

如果他們不會再被使用,爲什麼不呢? :) – user1656546

回答

1

cancel(true)在您的線程上調用interrupt(),僅此而已。所以,您需要在run()方法中正確處理它。對於你的簡單情況,你的線程將完成它們的執行,並且它們的對象將被GC清除。

+0

但即使我不會取消(true)這些線程,並讓他們打印「1」,在調試時他們仍然會運行。 – user1656546

+0

規範說,線程從運行返回後死亡,所以你不應該知道它。可能它只是用於你的IDE的調試模式,它們正在等待根線程停止。 – udalmik

+0

啊哈,所以這很酷,我擔心它會耗盡我的整個記憶一段時間後,如果我會不斷添加線程。多謝 :) – user1656546