高度なJavaは(7) - 同時(基本概念をマルチスレッド)

まず、割り込み
割り込み方法割り込みが唯一のスレッドが待機しているとき、ターゲットスレッド(割り込みステータス)の状態を変更する睡眠、参加して、他の州は、
常に割り込みを呼び出すと例外:InterruptedException例外をスローしたときに、内部メソッドの割り込みステータスの値をチェックしています。

メソッド割り込み
スレッドのインスタンスを:インスタンスを取得した後、スレッド他のスレッドによって呼び出される必要があり、電話をかけます。実際には、ちょうど雌ねじ割り込みステータスと呼ばれるに変更。

Thread.interrupted方法
Threadクラスのメソッド:現在の実行スレッドで呼び出される必要があり、この方法は、現在のスレッドの内部状態が中断された返し、その後、(falseに設定)割り込みステータスをクリア

isInterruptedをメソッド
スレッドのインスタンスメソッド:指定されたスレッドの割り込み状態をチェックします。場合は、スレッドの割り込みステータスは、trueを返し、そうでない場合はfalse。

第二に、コーディネートが
ために設定待機/ waitメソッド
Javaクラスの各インスタンスは、オブジェクトの実行待ちの方法は、現在のスレッドが中断される待機セットを持っており、オブジェクトの待機セット入力します
注:obj.wait現在のスレッドを実行するには()は、最初のオブジェクトのロックを取得する必要があります。待機セットにスレッドは、オブジェクトのロックを解除された場合。

この方法は、通知
方法は、スレッドから選ぶために待機セットに相当し、起床通知します。
下図のスレッドは、スレッドBはスレッド待機セットの任意の方法ウェイク通知呼び出す前に、オブジェクトロックの同一のインスタンスを取得する必要があり、その場合、オブジェクトの現在のインスタンスに設定待つ待ちます。

法のnotifyAll
のnotifyAllメソッドは、すべてのスレッドがきっかけに設定されているのを待つことと等価です。

待って、通知、のnotifyAllこれらの三つの方法がメソッドクラスjava.lang.Object(ノートではなく、Threadクラスのメソッド)です。
これらのメソッドは、現在のスレッドオブジェクトが直接オブジェクトのロックを呼び出して取得していない場合は、java.lang.IllegalMonitorStateExceptionは例外をスローします。

  • obj.wait()objが待機セットに現在のスレッドです。
  • obj.notify()ウェイトセットOBJ年代からスレッドを目覚めさせることです。
  • obj.notifyAllは()ウェイトセットOBJの年をきっかけに、すべてのスレッドです。

第三に、スレッド転送の状態

  • スレッドのRunnableインタフェースクラスを実装サブクラスまたはインスタンスを作成する場合、スレッドは、状態[初期]を入ります。
  • 開始メソッドのインスタンスを呼び出した後、スレッドは、[実行]状態に入ります。
  • システムが自動的に[状態]実行スレッドの中でいくつかの点でスケジュールするスケジュールされたスレッドが実行メソッドを呼び出し、[実装]状態に入ります。
  • スレッドの実行方法の実装が完了した後、[終了]状態に入ります。
  • [終了]スレッドの状態で、ある時点で、JVMガベージコレクションであろう。
  • Thread.yieldメソッドが呼び出された場合は、[状態]スレッドの実行中に、それは再び、スケジュールされるのを待って、状態を[実行]に戻ります。
  • 待機メソッドの呼び出しが、待機セットを入力し、待機する場合は、[状態]スレッドの実行中に、それらが他のスレッドによって覚醒されるまで通知、のnotifyAll、割り込み方法。
  • 実行スレッド[状態]では、メソッドのThread.sleep呼ばれた場合、入力し、[スリープ]状態はダウンし続けることはできません。睡眠時間が終了または中断した場合は、[状態]の実行に戻ります。
  • スレッドの実行中の[状態]、I / Oの完了を待って停止するI / O動作をブロック経験は、その後状態に戻った場合は、[実行]

第四に、不変モード
不変(不変)参加者
不変クラスを変更することができない参加者のフィールド値は、フィールドの値を変更する方法はありません、です。インスタンス不変の参加者が確立されると、状態は完全に変更されません。

アプリケーションシナリオ:
利点不変モード「同期保護を使用する必要はありません。」ということです そして、「同期の保護を使用せずに、」最大の利点は、生命と財産の安全性を損なうことなく利用可能で、プログラムの実行性能を向上させます。スレッドはほとんどの場合で共有されている場合は、実際の、そして非常に頻繁にアクセス、不変モードは重要な利点を再生することができるようになります。(最終的には、高性能可変理由の一つに修飾されました)

参考:https://segmentfault.com/blog/ressmix_multithread?page=3

おすすめ

転載: blog.51cto.com/4397014/2436897