2013-01-08 58 views
3

我会形容我的问题:java的主线程管理已启动其他线程

  • 我开发的异步模式的文档生成应用程序(Office文档),所以我使用的线程

  • 由于性能的限制,我必须在同一时间启动仅2个线程,

  • 为了不阻断用户启动文档生成而两个线程正在运行,我想开发含有ArrayDeque对象作为threa一个主线程d堆栈,在那里用户可以添加创建请求(作为实施Collable或Runnable接口的对象),并且使用并行API来启动线程上FIFO模式

    的问题是:

  • 如何能确保运行主线程作为所有用户的单身?

  • 我怎么能说ArrayDeque在主线程运行

回答

9

听起来像使用ExecutorService有两个线程池的简单情况:

class Task implements Runnable { 
    ... 
} 

ExecutorService exec = Executors.newFixedThreadPool(2); 
exec.submit(new Task()); // submit task to the queue for asynchronous processing 

ExecutorService将封装池线程和工作队列。线程会在完成前面的任务时自动选择新的工作。

+0

感谢铎,实际上ExecutorService的不会,除非前两个添加的任务完成后不粉碎JVM – ahajri

+0

技术上会有3(用户)线程这种方式,但主线程将结束,一旦工作提出了新的课题因为所有任务都已提交。 – biziclop

+2

@Karbala任务被立即提交到队列,但直到其中一个工作线程空闲时才会被处理。 –