2011-08-27 42 views
0

我是java.uti.concurrent包的新成员。我正在尝试使用ExecutorService来开发套接字列表器类。这是我主要的代码片段:Java并发性:我可以使用工作线程创建池

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,执行得很好。但是只有在完成我的第一个请求后才接受我的第二个套接字客户端连接。

任何人都可以请让我知道如何解决这个问题。

在此先感谢。

-Venkat Papana

+0

你正在做'MyTask'构造函数中会阻塞的任何东西吗? – SimonJ

+0

谢谢@SimonJ,我发现了这个问题。在我的MyTask构造函数中,我调用run()方法,在内部调用Future的get()方法。 非常感谢SimonJ。 –

回答

0

您不需要创建一个ExecutorService的“池”,只需使用一个ExecutorService的,它本身管理线程池内部。

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

+0

嗨Suraj,我实际上只创建一个ExecutorService对象。 'ExecutorService的池;' –

+0

OK cool..i看到你编辑你的问题... u能告诉我你是怎么创建 –

+0

我使用'池= Executors.newFixedThreadPool(POOLSIZE)的执行服务;'我' Main'和'MyTask'程序。 –

1

你创建了什么样的ExecutorExecutorService

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

嗨,Ammar,是的,我创建了Executors.newFixedThreadPool '我的'Main'程序中的'alpha = Executors.newFixedThreadPool(POOLSIZE)';' 就像在我的MyTask程序中一样。 –

相关问题