我不确定如何更好地将我的程序设计为多线程。基本上我有一个队列服务器,我连接到它并发送它工作,但是当我启动更多线程以更快地发送更多工作时,我注意到我的线程正在阻塞。
这是我正在做的一个例子(在我的程序中,我正在发送一些数据和一个从共享连接派生的通道)。
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 个工作单元,我希望它只建立一个新通道 4 次而不是 100 个。
我知道为我的服务器创建新通道/连接的语法似乎不明白如何以一种并非在每个实例上都建立的方式来做到这一点。将连接传递给线程并让它启动一个新通道(this.channel
每次都在创建一个新通道)