[Java]thread-デーモンプロセススレッド、実行制御


Javaによる定式学習の内容をまとめた.

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

  • は、通常のThreed作業に協力する補助的なThreedである.
  • の通常スレッドがすべて終了すると、デーモンスレッドは自動終了を強制します.
  • ゴミ収集器、自動記憶ワープロ、自動リフレッシュスクリーンなどがDemon Threadの例です.
  • booleanisDaemon()-スレッドがデーモンプロセスであることを確認します
    void setDaemon(boolean on)-スレッドをデーモンスレッドとして指定する場合に使用
  • デーモンプロセスは、無限ループと条件文を使用して作成され、実行後に待機し、特定の条件を満たすとタスクを実行し、再待機します.
  • デーモンの作成後にsetDaemonが設定されていない場合、プログラムは実行されます.
  • 2.スレッドの実行制御

  • の効率的なマルチスレッドプログラミングを実現するために、スレッドはリソースを無駄にしないで使用する必要があります.
  • 2-1. ねじ状態


  • NEW-ねじが生成され、start()
  • は呼び出されません.
  • RunNABLE-運転または実行可能状態
  • BLOCKED-同期ブロックによって一時停止された
  • WAITING-スレッドが終了していないが実行できない休止状態
  • TIMED WAITING-一時停止時間が指定する状態
  • TERMINTED-スレッドが終了しました
  • 2-2. 実行制御方法


    1) sleep


    static void sleep(long millis)
    static void sleep(long millis, int nanos)
  • 一定時間以内にThreadを停止します.
  • 静的メソッドなので、現在はスレッドでしか使用できません.
  • sleep()は、指定された時間内に完了するか、interrupt()(異常発生)によって起動されます.
  • したがって、try-catch文を頻繁に使用して例外を処理する必要があります.
    void delay(long millis){
    	try{
        	Thread.sleep(millis);
        }
        catch(InterruptedException e) {}
    }
  • 異常を処理するたびに面倒なので、上記の関数も作成して使用します.
  • 2) interrupt()


    void interrupt()-スレッドの割り込みステータスをtrueに変更
    boolean isInterrupted()-ねじの割り込み状態を返します
    静的ブール割込み()-現在のスレッドの割込みステータスを返しfalseに変更します.
  • 待機状態(WAITING)のスレッドを運転待機状態(RUNNABLE)に設定します.
  • 3) suspend(), resume(), stop()


    void suspend()-スレッドを一時停止
    void resume()-suspend()によって一時停止されたスレッドを実行待ち状態にする
    void stop()-スレッドを直ちに終了
  • これらの方法はデッドロックを引き起こすため、使用は推奨されません.
  • Java APIドキュメントにもDepentedと明記されています.
  • 4) join()


    void join()-すべてのタスクの完了を待つ
    void join(long millis)-指定の1/1000秒を待つ
    void join(long millis,int nanos)-1/1000秒、待機ナノ秒
  • スレッドは自分の作業を停止し、特定のスレッドが指定された時間内にタスクを実行するのを待つ.
  • sleep()と同様にinterrupt()によって待機状態から抜け出すことができるので、try-catch文を使用する必要があります.
  • 5) yield()

  • 残りの時間を次のスレッドに譲り、現在スレッドが待機しています.
  • 収量()および割り込み()が正しく使用されると、応答性および効率が向上する.
  • OSスケジューラのみ通知し、必ず実行する保証はありません.
  • それでも、使用収量()は効果がないわけではありません.