Java并发:我可以使用工作线程创建池

时间:2011-08-27 12:40:45

标签: java concurrency java.util.concurrent

我是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

2 个答案:

答案 0 :(得分:1)

您创建了哪种ExecutorExecutorService

public static final POOL_SIZE = 5;
ExecutorService exec = Executors.newFixedThreadPool(POOL_SIZE);

答案 1 :(得分:0)

您无需创建ExecutorService的“池”,只需使用一个ExecutorService,它本身就可以在内部管理一个线程池。

而且,ExecutorService的实现应该能够并行地执行给定数量的任务。例如,在其中使用Executors.new*ThreadPool()方法并相应地对其进行参数化。