Java并发性:我可以使用工作线程创建池吗
我不熟悉Java并发性:我可以使用工作线程创建池吗,java,concurrency,java.util.concurrent,Java,Concurrency,Java.util.concurrent,我不熟悉java.uti.concurrent包。我正在尝试使用ExecutorService开发一个socketlistner类。以下是我的主要代码片段: while (!getExit()) { try{ logger.info("RequestListner.run(): listening for new request..."); Socket socket = server.accept();
java.uti.concurrent
包。我正在尝试使用ExecutorService
开发一个socketlistner类。以下是我的主要代码片段:
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());
}
}
MyMyTask
类有一个ExecutorService
对象,它将提交MyTask2
任务。(我的目的是为我的每个套接字连接执行多线程处理)
我的应用程序正在接受套接字客户端请求并创建MyTask2
池,执行良好。但只有在完成第一个请求后才接受我的第二个套接字客户端连接
谁能告诉我怎么解决这个问题吗
提前谢谢
-Venkat Papana您不需要创建ExecutorService的“池”,只需使用一个ExecutorService,它本身就在内部管理一个线程池
而且,ExecutorService的实现应该能够并行执行给定数量的任务。例如,使用其中的方法并相应地对其进行参数化。您创建了什么类型的
Executor
或ExecutorService
public static final POOL_SIZE = 5;
ExecutorService exec = Executors.newFixedThreadPool(POOL_SIZE);
嗨,Suraj,我实际上只创建了一个ExecutorService对象<代码>服务池代码>好酷..我看到你已经编辑了你的问题…你能告诉我你是如何创建你的executor服务的吗?我正在使用
pool=Executors.newFixedThreadPool(POOLSIZE)代码>在我的Main
和MyTask
程序中。嗨,阿玛,是的,我正在创建执行器。仅newFixedThreadPoolpool=Executors.newFixedThreadPool(POOLSIZE)代码>在我的Main
程序中与在我的MyTask
prog中一样小。你在MyTask
构造函数中做了什么会阻塞的事情吗?谢谢@SimonJ,我发现了问题。在MyTask构造函数中,我调用run()方法,该方法在内部调用Future的get()方法。非常感谢你,西蒙吉。