在本教程中,我们将学习 Executor 的 newFixedThreadPool 工厂方法。 在上一篇教程中,我分享了ThreadPoolExecutor的介绍。如果您不了解 的概念ThreadPoolExecutor,您应该先了解一下。
ThreadPoolExecutor
此方法返回ThreadPoolExecutor其最大大小(假设 n 个线程)是固定的。如果所有 n 个线程都忙于执行任务并且提交了其他任务,那么它们将必须在队列中,直到有线程可用。
ExecutorService executorService=Executors.newFixedThreadPool(noOfThreads);
让我们创建一个非常简单的示例。
第 1 步:创建一个名为“LoopTask.java”的可运行任务。
package org.arpit.java2blog; public class LoopTask implements Runnable { private String loopTaskName; public LoopTask(String loopTaskName) { super(); this.loopTaskName = loopTaskName; } @Override public void run() { System.out.println("Starting "+loopTaskName); for (int i = 1; i <= 10; i++) { System.out.println("Executing "+loopTaskName+" with "+Thread.currentThread().getName()+"===="+i); } System.out.println("Ending "+loopTaskName); } }
第 2 步:创建一个名为FixedThreadPoolMain.java. 这将是我们的主要课程。
FixedThreadPoolMain.java
package org.arpit.java2blog; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FixedThreadPoolMain { public static void main(String args[]) { ExecutorService es=Executors.newFixedThreadPool(3); for (int i = 1; i <= 6; i++) { LoopTask loopTask=new LoopTask("LoopTask "+i); es.submit(loopTask); } es.shutdown(); } }
让我们运行上面的程序来检查输出:
Starting LoopTask 1 Starting LoopTask 3 Starting LoopTask 2 Executing LoopTask 3 with pool-1-thread-3====1 Executing LoopTask 1 with pool-1-thread-1====1 Executing LoopTask 3 with pool-1-thread-3====2 Executing LoopTask 2 with pool-1-thread-2====1 Executing LoopTask 3 with pool-1-thread-3====3 Executing LoopTask 1 with pool-1-thread-1====2 Executing LoopTask 3 with pool-1-thread-3====4 Executing LoopTask 2 with pool-1-thread-2====2 Executing LoopTask 3 with pool-1-thread-3====5 Executing LoopTask 3 with pool-1-thread-3====6 Executing LoopTask 1 with pool-1-thread-1====3 Executing LoopTask 3 with pool-1-thread-3====7 Executing LoopTask 2 with pool-1-thread-2====3 Executing LoopTask 3 with pool-1-thread-3====8 Executing LoopTask 1 with pool-1-thread-1====4 Executing LoopTask 3 with pool-1-thread-3====9 Executing LoopTask 2 with pool-1-thread-2====4 Executing LoopTask 3 with pool-1-thread-3====10 Executing LoopTask 1 with pool-1-thread-1====5 Executing LoopTask 1 with pool-1-thread-1====6 Ending LoopTask 3 Executing LoopTask 2 with pool-1-thread-2====5 Executing LoopTask 2 with pool-1-thread-2====6 Executing LoopTask 2 with pool-1-thread-2====7 Executing LoopTask 2 with pool-1-thread-2====8 Executing LoopTask 2 with pool-1-thread-2====9 Executing LoopTask 1 with pool-1-thread-1====7 Executing LoopTask 2 with pool-1-thread-2====10 Starting LoopTask 4 Ending LoopTask 2 Executing LoopTask 1 with pool-1-thread-1====8 Starting LoopTask 5 Executing LoopTask 4 with pool-1-thread-3====1 Executing LoopTask 5 with pool-1-thread-2====1 Executing LoopTask 1 with pool-1-thread-1====9 Executing LoopTask 1 with pool-1-thread-1====10 Ending LoopTask 1 Executing LoopTask 5 with pool-1-thread-2====2 Executing LoopTask 4 with pool-1-thread-3====2 Executing LoopTask 4 with pool-1-thread-3====3 Executing LoopTask 5 with pool-1-thread-2====3 Starting LoopTask 6 Executing LoopTask 5 with pool-1-thread-2====4 Executing LoopTask 4 with pool-1-thread-3====4 Executing LoopTask 5 with pool-1-thread-2====5 Executing LoopTask 5 with pool-1-thread-2====6 Executing LoopTask 6 with pool-1-thread-1====1 Executing LoopTask 6 with pool-1-thread-1====2 Executing LoopTask 6 with pool-1-thread-1====3 Executing LoopTask 6 with pool-1-thread-1====4 Executing LoopTask 5 with pool-1-thread-2====7 Executing LoopTask 4 with pool-1-thread-3====5 Executing LoopTask 4 with pool-1-thread-3====6 Executing LoopTask 4 with pool-1-thread-3====7 Executing LoopTask 4 with pool-1-thread-3====8 Executing LoopTask 5 with pool-1-thread-2====8 Executing LoopTask 6 with pool-1-thread-1====5 Executing LoopTask 5 with pool-1-thread-2====9 Executing LoopTask 4 with pool-1-thread-3====9 Executing LoopTask 4 with pool-1-thread-3====10 Executing LoopTask 5 with pool-1-thread-2====10 Ending LoopTask 5 Executing LoopTask 6 with pool-1-thread-1====6 Ending LoopTask 4 Executing LoopTask 6 with pool-1-thread-1====7 Executing LoopTask 6 with pool-1-thread-1====8 Executing LoopTask 6 with pool-1-thread-1====9 Executing LoopTask 6 with pool-1-thread-1====10 Ending LoopTask 6
我们使用了 new newFixedThreadPool,所以当我们提交时6 tasks,3 new threads将被创建并执行3 tasks。Other 3 tasks将在等待中queue。一旦线程完成任何任务,该线程将选择另一个任务并执行它。 这就是 Java newFixedThreadPool 示例的全部内容。
newFixedThreadPool
6 tasks
3 new threads
3 tasks
Other 3 tasks
queue
原文链接:https://codingdict.com/