ある種のメッセージシステムを提案します。最も簡単な方法は、スレッドセーフな FIFO を作成し、それを各スレッドに渡すことです。各スレッドに直接メッセージを送信したい場合は、スレッドごとに「トピック」を作成します。
スレッド名を使用して何かをハッキングしようとしないでください。後で制約を受けるだけです。
コメントから貼り付けて、解析できるようにします。
プライベート静的 BlockingQueue[] キュー。
プライベート静的 int queueNum = 0;
public static void newQueue (文字列 ip)
{
queue[queueNum] = new ArrayBlockingQueue(1024);
試してください{キュー[キュー番号].put(ip); }
catch (InterruptedException e){e.printStackTrace(); }
queueNum++;
}
ああ、私はあなたの問題を見ます。BlockingQueue に値を割り当てることはありません。その行を次のように変更してみてください。
private static BlockingQueue[] queue=new BlockingQueue[10];
これにより、10 個のキューが許可されます。
また、配列の代わりに HashMap を使用して、自由にキューに名前を付けたり、追加したり、削除したりできるようにすることもお勧めします。queue[2] である代わりに、 queue.get("Thread1Queue") またはより説明的なものに対処します。
コメントへの応答に注意してください: HashMap は通常、配列を置き換えることができます。ルックアップはほぼ同じくらい高速ですが、インデックスには数字の代わりに何でも使用します。メソッドはオーバーライドされます)、通常は文字列です。
したがって、多数のキューを保存していて、それらに具体的な名前を付けたい場合は、次のように言えます。
HashMap queues=new HashMap();
queues.put("queue1", new ArrayBlockingQueue(1024));
queues.put("queue2",new ArrayBlockingQueue(1024));
...
次に、アクセスしたいときはいつでも使用できます:
queues.get("queue1").put(新しい ThingToAddToArrayBlockingQueue())...
「追加するもの」をキュー1に入れます。
それらの「束」が必要で、どれがどれであるかを知る必要がない場合 (一般的なタスクに供給できるスレッドのコレクションのみ)、そのための特定のコレクション/パターンが並行パッケージにあります。