Executors执行器newFixedThreadPool方法示例

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

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

Executors.newFixedThreadPool(int nThreads) 方法

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

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

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

ExecutorService executorService = Executors.newFixedThreadPool(noOfThreads);

Java newFixedThreadPool例子

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

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

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

相关文章