パーク&パーキング位置から外し
基本的な使用
彼らは、クラスメソッドLockSupport
// 暂停当前线程
LockSupport.park();
// 恢复某个线程的运行
LockSupport.unpark(暂停线程对象)
機能
待つ&通知オブジェクトと比較すると
- 待機、通知とのnotifyAllにunparkを持っていない、オブジェクトモニター、および公園と併せて使用する必要があります
- パーク&unparkをスレッド]が[単位でブロックされ、[]スレッドを覚ますと、スレッドを待ってまでだけランダムウェイクに通知され、のnotifyAll]は[すべての待機中のスレッドが、それほど正確ではありません目覚めます
- パーク&unparkを缶最初unparkを、そして待つ&通知通知しません
公園unparkを原則
各スレッドは、独自のAパーカーオブジェクトは3つの部分で構成されているcounter
、cond
とmutex
アナロジーを描きます
- 彼のキャリーオンバッグ、条件変数の比率のようなバックパックテントのような旅行者、パーカーのようなスレッド。バックパックの代替乾燥食品(0枯渇、十分1)のような_counter
- それは見るためにある公園や停止する必要があるし、残りを呼び出し
- 予備の食料が枯渇した場合、その後、残りの部分に10トンになりました
- 十分な予備乾燥食品場合は、その停止し、上に移動する必要はありません。
- その乾燥食品の十分なように、unparkを呼び出します
- あなたはまだテントを通す場合は、ので、彼は目を覚ますと上を移動することを
- スレッドは、まだこの時点で実行されている場合、次の時間は、彼が唯一の乾燥食品を上に移動する滞留することなく、スペア消費され、公園を呼び出します
- 限られているため、袋スペースの、unparkをへの複数の呼び出しは予備乾燥食品を追加します
- 限られているため、袋スペースの、unparkをへの複数の呼び出しは予備乾燥食品を追加します
- 現在のスレッドがUnsafe.park()メソッドを呼び出します
- _mutexミューテックスを取得するために、このような状況は0で、この時間を_counterチェック
- ブロックされた状態変数_condにスレッド
- 提供_counter = 0
- コールUnsafe.unpark(Thread_0)メソッド、セット_counter 1
- 条件変数Thread_0を_condウェイク
- Thread_0再開操作
- 0に_counterセット