在这篇文章中,我们将学习Executor的newFixedThreadPool
factory方法。
创建一个线程池,重用固定数量的线程在一个共享的无界队列中运行。在任何时候,最多只有nThreads
threads在活动处理任务。如果在所有线程都处于活动状态时提交了额外的任务,它们将在队列中等待,直到有线程可用。如果任何线程在关机前的执行过程中因故障而终止,如果需要执行后续的任务,将有一个新的线程来代替它。池中的线程将存在,直到它被明确关闭。
**参数。 **nThreads 池中线程的数量
返回:新创建的线程池
抛出: IllegalArgumentException - 如果nThreads <= 0
语法:
ExecutorService executorService = Executors.newFixedThreadPool(noOfThreads);
让我们来创建一个非常简单的例子。
第一步:创建一个名为 "Task.java "的Runnable
task。
class Task implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("[" + Thread.currentThread().getName() + "] " + "Message " + i);
try {
Thread.sleep(200);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}
}
}
第2步:让我们创建newFixedThreadPool()
method,用两个线程执行5个任务。
public class FixedThreadPoolExample {
public static void main(final String[] args) throws InterruptedException, ExecutionException {
System.out.println("Thread main started");
final ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.execute(new Task());
executorService.execute(new Task());
executorService.execute(new Task());
executorService.execute(new Task());
executorService.execute(new Task());
executorService.shutdown();
System.out.println("Thread main finished");
}
}
输出
Thread main started
[pool-1-thread-1] Message 0
[pool-1-thread-2] Message 0
Thread main finished
[pool-1-thread-1] Message 1
[pool-1-thread-2] Message 1
[pool-1-thread-1] Message 2
[pool-1-thread-2] Message 2
[pool-1-thread-1] Message 3
[pool-1-thread-2] Message 3
[pool-1-thread-2] Message 4
[pool-1-thread-1] Message 4
[pool-1-thread-1] Message 0
[pool-1-thread-2] Message 0
[pool-1-thread-1] Message 1
[pool-1-thread-2] Message 1
[pool-1-thread-1] Message 2
[pool-1-thread-2] Message 2
[pool-1-thread-1] Message 3
[pool-1-thread-2] Message 3
[pool-1-thread-1] Message 4
[pool-1-thread-2] Message 4
[pool-1-thread-1] Message 0
[pool-1-thread-1] Message 1
[pool-1-thread-1] Message 2
[pool-1-thread-1] Message 3
[pool-1-thread-1] Message 4
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2018/09/executors-newfixedthreadpool-method-example.html
内容来源于网络,如有侵权,请联系作者删除!