2012-05-06 174 views
1

我正在做一種研究,我想將一個用戶線程作爲一個守護進程線程,Thread.setDaemon(true)生成一個線程守護進程,但正如我們所知道的,守護進程線程適合做後臺任務,所以我想把我的這個線程鏈接到任何後臺守護線程,這樣我的守護線程就可以爲這個線程提供一些服務,並且當守護線程結束時它應該結束,儘管我已經創建了守護線程但是請告訴我如何提供服務通過我的守護進程線程到任何現有的守護進程線程,然後它應該最終結束,請告知。關於守護進程線程

 Thread daemonThread = new Thread(new Runnable(){ 
      @Override 
      public void run(){ 
       try{ 
       while(true){ 
        System.out.println("Daemon thread is running"); 
       } 

       }catch(Exception e){ 

       }finally{ 
        System.out.println("Daemon Thread exiting"); //never called 
       } 
      } 
     }, "Daemon-Thread"); 

     daemonThread.setDaemon(true); //making this thread daemon 
     daemonThread.start(); 


} 
+0

你想通過守護線程提供哪些服務? –

+0

「我想將此線程鏈接到任何後臺守護程序線程,以便守護程序線程可以爲該線程提供一些服務」。定義「鏈接」。 – EJP

回答

2

我並不確切地知道你的意思,但我會改變

while(true){ 

while(!Thread.currentThread.isInterrupted()){ 

這將使你的線程停止中斷時。

我還會考慮使用ExecutorService,因爲這樣可以更輕鬆地將工作傳遞到另一個線程,並在完成時將其關閉。

ExecutorService service = Executors.newSingleThreadExecutor(new ThreadFactory() { 
    @Override 
    public Thread newThread(Runnable r) { 
     Thread t = new Thread(r, "worker"); 
     t.setDaemon(true); 
     return t; 
    } 
}); 

service.submit(new Runnable() { /* task for this thread to perform */ }); 

service.shutdown(); // to stop it. 
+0

如果使用executor服務,我可以讓一個線程作爲守護進程,如果是,那麼我的守護進程線程將爲任何現有的守護進程線程提供服務。 – dghtr

+1

我已經添加了一個例子。 –

+0

,非常感謝,但是您是否也請解釋儀式現在線程正在轉換爲守護程序,但是現在按照查詢,如果My守護程序線程應該爲任何現有的守護程序線程提供某種服務。 – dghtr