[Java]デーモンプロセススレッド(daemon thread)とスレッドの状態


デーモンプロセススレッド(daemon thread)

  • は、非デーモンプロセススレッドの処理を支援する補助的な役割を果たす.
  • 通常スレッドがすべて終了すると、デーモンスレッドも自動的に終了します.
  • ゴミ収集器(GC)、自動記憶、画面自動リフレッシュなどに使用します.
  • の無限ループと条件文を使用して作成され、実行後に待機し、特定の条件が満たされたときにタスクを実行し、再待機します.
  • boolean isDaemon():スレッドがDemon Threadであることを確認します.デーモンプロセススレッドの場合はtrueを返します
    void setDaemon(boolean on):スレッドをデーモンスレッドまたはユーザースレッドに変更します.(パラメータonをtrueとして指定すると、デーモンプロセススレッドになります.)
  • setDaemon(boolean on)はstart()を呼び出す前に実行する必要があります.
  • でなければIllegalThreadStateExceptionが生成されます.
  • サンプルコード

    public class Ex13_7 implements Runnable{
        static boolean autoSave = false;
    
        public static void main(String[] args) {
            Thread t = new Thread(new Ex13_7()); // Thread(Runnable r)
            t.setDaemon(true);
            t.start();
    
            for (int i = 1; i <= 10; i++) {
                try{
                    Thread.sleep(1000);
                } catch (InterruptedException e){}
                System.out.println(i);
                if (i == 5) {
                    autoSave = true;
                }
            }
            System.out.println("프로그램을 종료합니다.");
        }
    
        public void run(){
            while (true) {
                try{
                    Thread.sleep(3 * 1000);
                } catch(InterruptedException e) {}
    
                //autoSave의 값이 true이면 autoSave()를 호출
                if(autoSave){
                    autoSave();
                }
            }
        }
    
        public void autoSave(){
            System.out.println("작업파일이 자동저장되었습니다.");
        }
    }
    

    実行結果



    ねじ状態

  • には5つのスレッド状態が存在します.
  • ステータス摘要NEWスレッドが作成され、まだstart()が呼び出されておらず、RunNABLEが実行されているか、実行可能ステータスBLOCKED同期ブロックによって一時停止(ロック解除待ち)されているが、WAITING、TIMED WAITINGスレッドの操作はまだ終了していないが、実行不可能(Unrunable)一時停止状態にある.TIMED WAITINGは、一時停止時間TERMINTEDスレッドの操作が終了したことを示します
  • ブランコを連想してみましょう.
  • に並んでブランコで休憩し、ブランコを終わらせたいならTERMINATEDになります.