我是java.uti.concurrent
套餐的新手。我正在尝试使用ExecutorService
开发套接字列表器类。这是我的主要代码段:
while (!getExit()) {
try{
logger.info("RequestListner.run(): listening for new request...");
Socket socket = server.accept();
logger.info("RequestListner.run(): got new request");
MyTask task = new MyTask(socket);
pool.submit(task);
logger.info("RequestListner.run(): submitted new request to pool");
}catch(Exception e) {
logger.error("RequestListner.run(): Exception: "+e.getMessage());
}
}
我的MyTask
班级有ExecutorService
个对象,它会提交MyTask2
个任务。 (我的意图是为每个套接字连接执行多线程处理)
我的应用程序正在接受我的套接字客户端请求并创建MyTask2
池,执行正常。但是在完成我的frist请求后才接受我的第二个套接字客户端连接。
任何人都可以让我知道如何解决这个问题。
提前致谢。
-Venkat Papana
答案 0 :(得分:1)
您创建了哪种Executor
或ExecutorService
?
public static final POOL_SIZE = 5;
ExecutorService exec = Executors.newFixedThreadPool(POOL_SIZE);
答案 1 :(得分:0)
您无需创建ExecutorService的“池”,只需使用一个ExecutorService,它本身就可以在内部管理一个线程池。
而且,ExecutorService的实现应该能够并行地执行给定数量的任务。例如,在其中使用Executors.new*ThreadPool()方法并相应地对其进行参数化。