2012-05-06 17 views
1

デーモンスレッドとしてユーザースレッドを作成したいと考えていましたが、Thread.setDaemon(true)はスレッドデーモンを作成しますが、Daemon Threadsはバックグラウンドジョブに適していることがわかっています。私のデーモンスレッドは、そのスレッドにいくつかのサービスを提供できるように、私はこのスレッドをバックグラウンドデーモンスレッドにリンクしたいと思います。デーモンスレッドを作成しましたが、終了する必要があります。サービスを私のデーモンスレッドを介して既存のデーモンスレッドに渡してから最後に終了するようにしてください。デーモンスレッドについて

 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

エグゼキュータサービスを使用している場合は、デーモンとしてスレッドを作成することができますか?その場合は、デーモンスレッドは既存のデーモンスレッドにサービスを提供します。 – dghtr

+1

私は例を追加しました。 –

+0

、ありがとう、しかし、あなたはまた、現在のスレッドはデーモンに変換されていますが、今のように、このデーモンスレッドが存在するデーモンスレッドに何らかのサービスを提供する必要があるかどうかを問い合わせます。 – dghtr

関連する問題