2017-02-19 67 views
1

我有一個HashMap刪除正在運行的線程,我想從它刪除特定正在運行的線程,我想線程繼續做一些處理,然後將被銷燬,任何人都知道會發生什麼時正在運行的線程從散列表中刪除?從一個HashMap

+0

甲參照'Thread'是從* Java中的任何其它參考類型*沒有什麼不同。 – CKing

+0

所以你的意思是線程不會繼續處理,垃圾回收器會擺脫它? – stackmalux

+0

是的。如果'Thread'沒有被其他地方引用,'Thread'完成執行它的'run'方法。 – CKing

回答

3

的人都知道,當正在運行的線程從HashMap中去掉會發生什麼?

線程將繼續運行,直到它完成其run方法。換句話說,它會在完成時完成。

參考:Life cycle of a thread in Java


額外:

同樣的情況在下面的例子。

new Thread(runnableObject).start(); 

這個線程會在後臺運行,直到runnableObject終止。

+0

非常感謝所有人。 – stackmalux

+0

不客氣。 – Zack

0

同意,你的線程將繼續運行,直到方法的run()結束。

嘗試此代碼:

//Create the HashMap 
    HashMap<String, Thread> map = new HashMap<String, Thread>(); 

    //Create a task 
    Runnable task =() -> { 
     while (true) { 
      System.out.println("Tick " + System.currentTimeMillis()); 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 

    //Create a thread with the task 
    Thread t = new Thread(task); 

    //Add this thread into the map 
    map.put("KEY", t); 

    //Start this thread 
    t.start(); 

    //Add this thread into the map 
    map.remove("KEY"); 
+0

我的代碼沒有任何問題,我的程序工作正常。 – stackmalux

+0

非常感謝您分享您的代碼。 – stackmalux