2011-07-13 15 views
0

Javaの固定スレッドプールの拡張機能を使用したい状況があります。私はリソースのために競争したい実行可能なオブジェクトのN個のグループを持っています。しかし、私はスレッドの総数を一定のままにしておきたいと思います。ここで私がこれを動作させる方法を概説します。競合キューを持つJava Threadpool

  1. N個のスレッドとM個のキューを持つオブジェクトを割り当てます。
  2. キューm上のジョブnをスケジュールします。
  3. 最初のキューへのポインタを持ちます を繰り返します。 a。最大スレッド数が現在使用中の場合は待機します。 b。現在のキューでジョブをポップオフします。 c。ポインタを1つ上のキューに移動する(または最後のキューから最初のキューに移動)

まず、このようなものは既に存在しますか?二番目になければ、私自身のスレッドプールを書くことが危険であるかもしれないことを知っているので、私は自分自身を書くことに心配しています。誰かが自分のことを書くための良い例を教えてくれるでしょうか。

+0

Doug Leaさんのフォークジョインはここで助けになりますか? –

+0

残念ながら私は現在Java 6に限定されています。 fork-joinはJava 7でしかないようです。 – Jon

+0

Mキューは、1つのキューには何を与えていないのですか? –

答えて

1

おそらく、他のキューを循環する独自のキュー実装を作成している可能性があります。たとえば(擬似コードで):

class CyclicQueue { キューキュー[]; int current = 0;これで

CyclicQueue(int size) { 
    queues = new Queue[size]; 

    for(int i=0; i<size; i++) 
    queues[i] = new LinkedList<T>(); 
} 

T get() { 
    int i = current; 
    T value; 
    while((value = queues[i].poll() == null) { 
    i++; 
    if(i == current) 
     return null; 
    } 
    return value; 
} 

}もちろん

、あなたは自分でそれを追加する必要がありますブロックしたい場合。

この場合、親キューに値が追加されたことを通知できるカスタムキューが各キューに必要です。

+0

ありがとう、これも私が考えていたものです。 – Jon

関連する問題