2012-05-06 8 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

, 고마워,하지만 당신은 또한 제발 지금은 스레드가 데몬으로 변환되고 있지만 지금은이 데몬 스레드가 존재하는 데몬 스레드에 어떤 종류의 서비스를 제공해야하는지에 따라 쿼리별로 설명하고 있습니다. – dghtr