2016-07-02 8 views
1

私は10個のアクティブなスレッドと3個のリソース(何かのもの) を持っていますが、最初の3つのスレッドはリソースを取得していますが、目を覚ますか、または通知することは、私が待っている最初のスレッドが目を覚ます最初のものであることを意味します。 ありがとうございます。JAVAは特定の順序でスレッドを起動します

答えて

1

私は、このリンクが非常によく、それを説明すると思う:https://www.safaribooksonline.com/library/view/java-threads-second/1565924185/ch04s03.html

使用して、決めるか、スレッドが実行を許可され、事前に決定することは不可能である通知します。てみましょう:リンクに記載された方法を使用し

  • 利用のnotifyAll()と
  • かどうか、そのターン、それが(同期FIFOキューを使用することによって)された自身のために、各スレッドのチェックをしてみましょう:私はこれまで2つのソリューションを参照します各スレッドは異なるオブジェクトを待ち、正しいオブジェクトに通知する唯一の目的を持つ1つのスレッドを使用します。これは私にとって最高の解決策のようです。
0

公正なロックを使用すると、Javaは一般的にこれらのことを決定しません。

Lock lock = new ReentrantLock(true); 

これらのスレッドは、試行された順序でロックを取得します。これは、注文スレッドを無視することによって動作し、スレッドがFIFOキュー上で次のスレッドでなければ通知され、取られないロックを保証する。

関連する問題