プログラムをマルチスレッドにうまく設計する方法がわかりません。基本的に、接続して作業を送信するキューサーバーがありますが、より多くのスレッドを起動してより多くの作業をより速く送信すると、スレッドがブロックされていることに気付きます。
これが私がしていることの例です(私のプログラムでは、共有接続から派生したいくつかのデータとチャネルを送信しています)。
class Send_to_Queue implements Runnable{
protected String queue_name = null;
protected Channel channel = null;
protected byte[] message = 0
public Send_to_Queue(String queue_name, byte[] message, Channel channel) {
// TODO Auto-generated constructor stub
this.queue_name = queue_name;
this.message = message;
this.channel = channel;
}
このチャネルは、起動されているすべてのスレッドによって共有されているスレッドに固有のものではありません。これは、ブロッキングが発生している場所だと思います。私はこれを行うための最良の方法について少し混乱しています。なぜなら ThreadPoolExecutor
、その存続期間中、新しいチャネルを作成する方法がわからず、タスクごとに新しいチャネル(一種の高価な)を作成しないからです。作業がない場合はシャットダウンしてもかまいませんが、4つのスレッドと100の作業ユニットがある場合は、100ではなく4回だけ新しいチャネルを確立する必要があります。
サーバーへの新しいチャネル/接続を作成するシナクスは、すべてのインスタンスで確立されていない方法でそれを行う方法を理解していないようです。スレッドに接続を渡し、新しいチャネルを開始させる(下this.channel
は毎回新しいチャネルを作成しています)