java同期器SynchronousQue詳細及び実例

1451 ワード

同期器概要
       勉強してからスレッドの操作に対して大きな変化があります。c/c++のmuttexからjavaの各ロックまで(もちろん面倒臭いというわけではありません。javaの読み書きロックの実現には多くのメリットがありますが、sokcetのデザインはお世辞にも言えません。tcpとudpは二つの種類です。今はupにあまり詳しくないです。)。その中で一番必要とされるのは同期器です。countdownlatchを除いて、後は全部比較的に必要です。cyclicbarrierは今唯一彼のいい効果を感じられます。これは循環印刷a、b、exchangeとSynchronousQueです。以上は四大同期器です。2つ以上のものがすごいと聞きましたが、場合によっては考えにくいです。
シーンの考え方
      今回は最後の二つのシーンを話しましょう。私がやるべきことはデータを集めて、他のデータを集めて総合的に処理します。しかし、二つのデータは時間と関連しています。順番に実行すれば、処理結果の信頼度が低いほど、最初の構想は非同期処理を利用して、二つのデータを集めて同時に処理します。futuretask、第一選択として、私の情報収集はまだ周期的な任務です。タイミングのスレッドプールを使わなくてはいけません。しかし、このようなスレッド池は(timerはおろか、このクラスはスレッド池で交換することをお勧めします。)非同期処理のための戻り値がありません。私も直接に処理のデータを取得することができません。同期器を使って同期しなければなりません。手動でスレッドをブロックしてから呼び覚ましてはいけません。全起動して、実行してはいけないコードが運行を開始して、単一を起動して、またcpuのスケジュールを見なければなりません。そこで、exchangeとSynchronousQueを思い出しました。最終的にSynchronousQueを選びました。
Synch ronousQue
        実は特殊な渋滞行列です。特に彼には一番多くの元素を入れます。そしてこの元素は特定の時間に消費しないとなくなります。そして永遠の長さは全部0です。
デモ
生産者、メッセージは最大1分間保管してください。

public void run() {
  try {
  queue.offer(i++,1,TimeUnit.MINUTES);
  } catch (InterruptedException e) {
  e.printStackTrace();
  }
  System.out.println("add");

 }

消費者

System.out.println(queue.poll(1,TimeUnit.SECONDS));
この同期器を使って、このようなタイミングで生産者の消費者に問題があります。コード量が少ないので、自分で同期コードを書く必要がありません。最初のブロッキングによる予断性も避けられた。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。