2016-10-29 7 views
0

私はセマフォを使用するのが初めてです。だから、私は7つの許可を与えて、49人(スレッド)がそれらを待っていると言うことができます。私が最初の7人のセマフォを獲得して(例えば)、それらを別のクラスに渡すことによってリスト配列(人のセマフォを格納する)に格納するとします。次に、その配列に戻り、他のクラスのセマフォをループスルーしてrelease()した場合、その次のキーを待っている他のスレッドがトリガーされるべきではありませんか?私がコーディングしたものはこれを行い、次の7つのスレッドはキーを取得しないためです。コードを投稿していないのは、私が逃しているものを概念的に理解し、それを実装したいからです。Javaでセマフォを使用し、配列に格納する

+0

[mcve]を作成する際には、通常、最善の方法を投稿することをおすすめします(リンクを参照してください)。 –

答えて

2

何をしたいが、一度にアクティブになるように、最大​​7つのスレッドを持っているのであれば、 あなただけのように、1つのセマフォを必要とする:

Semaphore available = new Semaphore(7, true); 

とあなたのスレッドのそれぞれが(available.acquire を呼びましょう)(そして最終的にはavailable.release())、これは非常にセマフォーなインスタンス(すべてのスレッドによって共有されています)に対するものです。

はここjava.util.concurrent.Semaphoreのjavadocはこう言われる、

カウンティングセマフォ。概念的には、セマフォーは の許可を維持します。それぞれのacquire()は、許可が になるまでブロックし、それを受け取ります。各リリース()は、許可を追加します。 は、潜在的にブロック取得者を解放します。 しかし、実際の許可オブジェクトは使用されません。 セマフォは数字 のカウントを保持し、それに応じて動作します。

関連する問題