【发布时间】:2014-06-29 15:04:45
【问题描述】:
当我们使用 Java 的 Executor 服务创建一个线程池并将线程提交到该线程池时,这些线程执行的顺序是什么?
我要确保线程先提交,先执行。 例如,在下面的代码中,我希望首先执行前 5 个线程,然后执行接下来的 5 个线程,依此类推...
// Create a thread pool of 5 threads.
ScheduledExecutorService exService = Executors.newScheduledThreadPool(5, new ModifiedThreadFactory("ReadThreadPool"));
// Create 100 threads.
MyThread[] threads = createMyThreads(100);
// Submit these 100 threads to thread pool for execution.
for(MyThread thread : threads) {
exService.submit(thread);
}
Java 的线程池是否为此提供了任何 API,或者我们是否需要在我们端实现一个 FIFO 队列来实现这一点。 如果 Java 的线程池不提供任何此类功能,我真的很想了解不存在此功能的原因,因为它对我来说似乎是一个非常常见的用例。 这在技术上是不可能的(我认为这不太可能),还是只是错过了?
【问题讨论】:
-
哥们,它是用那个类的javadoc写的
-
我希望那些
MyThread对象只是命名错误,实际上并没有扩展java.lang.Thread。它们应该只是Runnable任务。执行者会给他们一个线程来执行。 (Thread实现Runnable的事实是一个历史错误。)
标签: java multithreading threadpool executorservice