2012-10-14 82 views
4

我有一個main()方法調用一個Thread類並啓動一個線程。這個線程有一個while(threadBool)循環,所以當我退出程序時(通過設置threadBool爲false),我需要停止它。放置addShutdownHook()的最佳地點在哪裏?在main()方法關閉掛鉤的最佳地點

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 

      public void run() { 
       class.threadBool=false; 
      } 
     })); 

或同一類發起的主題

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { 

      public void run() { 
       threadBool=false; 
      } 
     })); 
+1

當你System.exit它殺死所有現有的用戶線程。你想通過設置這個標誌關閉什麼? –

+1

爲什麼不製作線程池守護進程? – MadProgrammer

回答

13

最好的地方是無處可言。關閉鉤子只是最後一招,因爲程序意外中斷以挽救可以挽救的東西。

您應該組織代碼,以便有一個乾淨定義的入口點,主體和出口點。然後,您可以在出口點停止線程。