2012-07-26 101 views
0

我有一個要求,我想創建一個由5個線程組成的池,現在我想從這5個線程中創建一個線程作爲daemon線程,並且當該特定1線程變爲守護線程,那麼我想分配一些任務到與任何服務相關的守護進程線程,以便當java程序退出時,我可以在窗口任務管理器中檢查特定的守護進程線程是否仍在執行該任務。請指出如何實現這一點。正如我堅持這一點..!關於將任務分配給守護進程線程

下面是我的代碼...

public class StoppingThread extends Thread //extend thread class 
{ 
    // public synchronized void run() 
    //synchronized (this) 

    private volatile boolean Completed = false; 


    public void setCompleted() { 
     Completed = true; 
    } 


    public void run() 
    { 
     for(int i=0;i<20 && !Completed;++i) { 
      System.out.println(Thread.currentThread().getName()); 
     try { 
      Thread.sleep(500); 

      System.out.print(i +"\n"+ ".."); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
     } 
    } 

public static void main(String... a) 
{ 
    StoppingThread x = new StoppingThread(); 
    StoppingThread y = new StoppingThread(); 
    x.start(); 
    x.setName("first"); 
    x.setCompleted(); // Will complete as soon as the latest iteration finishes means bolean variable value is set to true 
    y.start(); 
    y.setName("second"); 

    } 

} 

現在,在這個我想使Ÿ線程作爲守護線程,然後希望將一些任務分配給它

回答

5

使用ShutDownHook。註冊到鉤子的線程將在應用程序結束時調用。您可以在此線程運行方法中添加所有清理代碼(數據庫,流,上下文等)或任何自定義功能。

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run() { // clean up code like closing streams,DB etc } 
}); 
+0

@ Akhil ..請您在我上面的代碼中進行修改..!根據你的建議,這將有助於理解概念 – user1538526 2012-07-26 07:09:27

+1

讓我引用你「當java程序退出時,我可以在窗口任務管理器中檢查特定守護程序線程是否仍在執行該任務。你能詳細說明嗎?如果沒有其他線程正在運行,守護進程線程將退出。那麼您希望此線程執行什麼操作? – 2012-07-26 07:25:07