java主线程管理启动其他线程

Kim*_*imB 3 java multithreading asynchronous fifo java.util.concurrent

我会描述我的问题:

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

  • 由于性能限制,我必须同时启动2个线程,

  • 为了在两个线程运行时不阻止用户启动文档生成,我想开发一个包含ArrayDeque对象作为线程堆栈的主线程,用户可以在其中添加创建请求(作为实现Collable或Runnable接口的对象)并使用Concurrent API在FIFO模式下启动线程

    问题是:

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

  • 如何在主运行线程上调用ArrayDeque

Tud*_*dor 9

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

class Task implements Runnable {
    ...
}

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

ExecutorService将封装线程池和工作队列.线程将在完成先前任务时自动获取新工作.

  • @Karbala任务立即提交到队列,但在其中一个工作线程空闲之前不会被处理. (2认同)
  • @Karbala任务被添加到无界队列中,因此发布新任务的线程不必等待旧任务完成. (2认同)