Javaの並行プログラミングノート8

パーク&パーキング位置から外し

基本的な使用

彼らは、クラスメソッドLockSupport

// 暂停当前线程
LockSupport.park();
// 恢复某个线程的运行
LockSupport.unpark(暂停线程对象)

機能

待つ&通知オブジェクトと比較すると

  • 待機、通知とのnotifyAllにunparkを持っていない、オブジェクトモニター、および公園と併せて使用する必要があります
  • パーク&unparkをスレッド]が[単位でブロックされ、[]スレッドを覚ますと、スレッドを待ってまでだけランダムウェイクに通知され、のnotifyAll]は[すべての待機中のスレッドが、それほど正確ではありません目覚めます
  • パーク&unparkを缶最初unparkを、そして待つ&通知通知しません

公園unparkを原則

各スレッドは、独自のAパーカーオブジェクトは3つの部分で構成されているcountercondmutexアナロジーを描きます

  • 彼のキャリーオンバッグ、条件変数の比率のようなバックパックテントのような旅行者、パーカーのようなスレッド。バックパックの代替乾燥食品(0枯渇、十分1)のような_counter
  • それは見るためにある公園や停止する必要があるし、残りを呼び出し
    • 予備の食料が枯渇した場合、その後、残りの部分に10トンになりました
    • 十分な予備乾燥食品場合は、その停止し、上に移動する必要はありません。
  • その乾燥食品の十分なように、unparkを呼び出します
    • あなたはまだテントを通す場合は、ので、彼は目を覚ますと上を移動することを
    • スレッドは、まだこの時点で実行されている場合、次の時間は、彼が唯一の乾燥食品を上に移動する滞留することなく、スペア消費され、公園を呼び出します
      • 限られているため、袋スペースの、unparkをへの複数の呼び出しは予備乾燥食品を追加します
        ここに画像を挿入説明
  1. 現在のスレッドがUnsafe.park()メソッドを呼び出します
  2. _mutexミューテックスを取得するために、このような状況は0で、この時間を_counterチェック
  3. ブロックされた状態変数_condにスレッド
  4. 提供_counter = 0
    ここに画像を挿入説明
  5. コールUnsafe.unpark(Thread_0)メソッド、セット_counter 1
  6. 条件変数Thread_0を_condウェイク
  7. Thread_0再開操作
  8. 0に_counterセット
公開された93元の記事 ウォン称賛31 ビュー30000 +

おすすめ

転載: blog.csdn.net/weixin_43866567/article/details/104976328