Executors执行器newFixedThreadPool方法示例

x33g5p2x  于2022-10-06 转载在 其他  
字(2.0k)|赞(0)|评价(0)|浏览(646)

在这篇文章中,我们将学习Executor的newFixedThreadPoolfactory方法。

Executors.newFixedThreadPool(int nThreads) 方法

创建一个线程池,重用固定数量的线程在一个共享的无界队列中运行。在任何时候,最多只有nThreadsthreads在活动处理任务。如果在所有线程都处于活动状态时提交了额外的任务,它们将在队列中等待,直到有线程可用。如果任何线程在关机前的执行过程中因故障而终止,如果需要执行后续的任务,将有一个新的线程来代替它。池中的线程将存在,直到它被明确关闭。

**参数。 **nThreads 池中线程的数量
返回:新创建的线程池

抛出: IllegalArgumentException - 如果nThreads <= 0
语法:

  1. ExecutorService executorService = Executors.newFixedThreadPool(noOfThreads);

Java newFixedThreadPool例子

让我们来创建一个非常简单的例子。

第一步:创建一个名为 "Task.java "的Runnabletask。

  1. class Task implements Runnable {
  2. @Override
  3. public void run() {
  4. for (int i = 0; i < 5; i++) {
  5. System.out.println("[" + Thread.currentThread().getName() + "] " + "Message " + i);
  6. try {
  7. Thread.sleep(200);
  8. } catch (final InterruptedException e) {
  9. e.printStackTrace();
  10. }
  11. }
  12. }
  13. }

第2步:让我们创建newFixedThreadPool()method,用两个线程执行5个任务。

  1. public class FixedThreadPoolExample {
  2. public static void main(final String[] args) throws InterruptedException, ExecutionException {
  3. System.out.println("Thread main started");
  4. final ExecutorService executorService = Executors.newFixedThreadPool(2);
  5. executorService.execute(new Task());
  6. executorService.execute(new Task());
  7. executorService.execute(new Task());
  8. executorService.execute(new Task());
  9. executorService.execute(new Task());
  10. executorService.shutdown();
  11. System.out.println("Thread main finished");
  12. }
  13. }

输出

  1. Thread main started
  2. [pool-1-thread-1] Message 0
  3. [pool-1-thread-2] Message 0
  4. Thread main finished
  5. [pool-1-thread-1] Message 1
  6. [pool-1-thread-2] Message 1
  7. [pool-1-thread-1] Message 2
  8. [pool-1-thread-2] Message 2
  9. [pool-1-thread-1] Message 3
  10. [pool-1-thread-2] Message 3
  11. [pool-1-thread-2] Message 4
  12. [pool-1-thread-1] Message 4
  13. [pool-1-thread-1] Message 0
  14. [pool-1-thread-2] Message 0
  15. [pool-1-thread-1] Message 1
  16. [pool-1-thread-2] Message 1
  17. [pool-1-thread-1] Message 2
  18. [pool-1-thread-2] Message 2
  19. [pool-1-thread-1] Message 3
  20. [pool-1-thread-2] Message 3
  21. [pool-1-thread-1] Message 4
  22. [pool-1-thread-2] Message 4
  23. [pool-1-thread-1] Message 0
  24. [pool-1-thread-1] Message 1
  25. [pool-1-thread-1] Message 2
  26. [pool-1-thread-1] Message 3
  27. [pool-1-thread-1] Message 4

相关文章