私はそれを間違っていると思います。共有キューから一部のデータをクランチすると思われるスレッドを作成しています。私の問題は、プログラムが遅く、メモリを大量に消費することです。キューが期待どおりに共有されていない可能性があると思われます。コードにキューのサイズを表示する行を追加し、2 つのスレッドを起動すると、まったく異なる数値の 2 つの出力が得られ、それぞれが増加しているように見えるため、これが疑われます (同じ数値である可能性があると思いましたが、 100 から 2 などにジャンプしていたのかもしれませんが、見た後では 105 と 5 が表示され、異なる速度で進んでいます.4 つのスレッドがある場合は、4 つの異なる数値が表示されます)。
関連部分の抜粋です。プログラムの先頭にあるキューに必要なデータを含む静的クラスを作成します
static class queue_class {
int number;
int[] data;
Context(int number, int[] data) {
this.number = number;
this.data = data;
}
}
次に、いくつかのジョブを callable に送信した後、キューを作成します。
static class process_threaded implements Callable<Void> {
// queue with contexts to process
private Queue<queue_class> queue;
process_threaded(queue_class request) {
queue = new ArrayDeque<queue_class>();
queue.add(request);
}
public Void call() {
while(!queue.isEmpty()) {
System.out.println("in contexts queue with a size of " + queue.size());
Context current = contexts.poll();
//get work and process it, if it work great then the solution goes elsewhere
//otherwise, depending on the data, its either discarded or parts of it is added back to queue
queue.add(new queue_class(k, data_list));
ご覧のとおり、データには 3 つのオプションがあります。データが良好な場合は送信され、データが完全にひどい場合は破棄されるか、キューに戻されます。送り返されたときにキューが動いていると思いますが、各スレッドが共有キューではなく独自のキューで動作しているためと思われます。
この推測は正しいですか、私はこれを間違っていますか?