背景:
有一个GUI程序,通过socket接收客户端发送的内容,然后再发送给其它地址。实现: 使用concurrent包中的pooledExecutor来实现一个线程池。由线程池中的线程负责接收到数据的
处理。代码:
PooledExecutor pooledExecutor = new PooledExecutor(10);
ServerSocket serverSocket = new ServerSocket(8999);
while(true) {
Socket socket = serverSocket.accept();
pool.execute(new Runnable() {
public void run() {
new Handler().process(socket);
}
}); }
class Handler {
void process(Socket s) {
}
}现在的问题是: 在Handler类中,发送操作可能很费时,这样线程迟迟不能回收,导致线程池中可用的线程很少,
从而不能接收更多的其它用户请求。 能否这样做:
线程池中的线程收到客户端请求后,将接收内容放入线程池维护的队列后,马上返回。 然后再实现一个线程池,专门读取第一个线程池维护的队列,然后将内容发送出去。 不知道这样是否可行?
如果可行,第一个线程池怎么操作自己的队列?
第二个线程池又如何和第一个线程池维护的队列通讯? 第一次使用concurrent包,请高手指点。谢谢。
解决方案 »
- 谁能帮我用SWT写一个简单的聊天程序!要源代码,功能说明在文章内容里写着呢!很急!
- 求助,SWT中的Composite面板如何滚动
- 关于Swing中按钮的问题
- 初学java,写了一个极其简单的一对一的聊天程序,贴出来,请高手们指正。只为提高象我这样的菜鸟的编程水平
- 解决问题者有分
- java文件操作,简单,急用!谢谢
- POI中如何设置电子表格中的URL, 急!!!!!在线等待!!!
- java再屏幕上画点,要显示出来,然后再对存储的点进行下一步的操作。怎么实现阿?要交作业了,大家帮忙阿!!!!
- 请教高手:java.lang.reflect.Method类中的invoke(Object obj, Object[] args)如何理解
- 哪里有core java的e版down啊?
- getvalueisadjusting
- 关于jtable渲染方面的问题
发现我的理解有误。线程池中绑定的消息队列中存放的应该是task,而不是数据。在这个应用中,两个线程池需要一个线程安全的队列来通讯?
如果socket需要多次交互,那么你得多开线程(500左右),并且优化process。
如果socket需要多次交互,那么你得多开线程(500左右),并且优化process。