开发手册 欢迎您!
软件开发者资料库

newCachedThreadPool方法

Java并发newCachedThreadPool方法 - 从简单和简单的步骤学习Java并发,从基本到高级概念,包括概述,环境设置,主要操作,线程通信,同步,死锁,ThreadLocal,ThreadLocalRandom,Lock,ReadWriteLock,Condition,AtomicInteger,AtomicLong ,AtomicBoolean,AtomicReference,AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray,Executor,ExecutorService,ScheduledExecutorService,newFixedThreadPool,newCachedThreadPool,newScheduledThreadPool,newSingleThreadExecutor,ThreadPoolExecutor,ScheduledThreadPoolExecutor,Futures and Callables,Fork-Join框架,BlockingQueue,ConcurrentMap,ConcurrentNavigableMap。

可以通过调用Executors类的静态newCachedThreadPool()方法来获取缓存的线程池.

语法

ExecutorService executor = Executors.newCachedThreadPool();

其中

  • newCachedThreadPool方法创建执行程序具有可扩展的线程池.

  • 这样的执行程序适用于启动许多短期任务的应用程序.

示例

以下TestThread程序显示在基于线程的环境中使用newCachedThreadPool方法.

import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class TestThread {   public static void main(final String[] arguments) throws InterruptedException {      ExecutorService executor = Executors.newCachedThreadPool();      // Cast the object to its class type      ThreadPoolExecutor pool = (ThreadPoolExecutor) executor;      //Stats before tasks execution      System.out.println("Largest executions: "         + pool.getLargestPoolSize());      System.out.println("Maximum allowed threads: "         + pool.getMaximumPoolSize());      System.out.println("Current threads in pool: "         + pool.getPoolSize());      System.out.println("Currently executing threads: "         + pool.getActiveCount());      System.out.println("Total number of threads(ever scheduled): "         + pool.getTaskCount());      executor.submit(new Task());      executor.submit(new Task());      //Stats after tasks execution      System.out.println("Core threads: " + pool.getCorePoolSize());      System.out.println("Largest executions: "         + pool.getLargestPoolSize());      System.out.println("Maximum allowed threads: "         + pool.getMaximumPoolSize());      System.out.println("Current threads in pool: "         + pool.getPoolSize());      System.out.println("Currently executing threads: "         + pool.getActiveCount());      System.out.println("Total number of threads(ever scheduled): "         + pool.getTaskCount());      executor.shutdown();   }     static class Task implements Runnable {      public void run() {                  try {            Long duration = (long) (Math.random() * 5);            System.out.println("Running Task! Thread Name: " +               Thread.currentThread().getName());               TimeUnit.SECONDS.sleep(duration);            System.out.println("Task Completed! Thread Name: " +               Thread.currentThread().getName());         } catch (InterruptedException e) {            e.printStackTrace();         }      }   }}

这将产生以下结果.

输出

Largest executions: 0Maximum allowed threads: 2147483647Current threads in pool: 0Currently executing threads: 0Total number of threads(ever scheduled): 0Core threads: 0Largest executions: 2Maximum allowed threads: 2147483647Current threads in pool: 2Currently executing threads: 2Total number of threads(ever scheduled): 2Running Task! Thread Name: pool-1-thread-1Running Task! Thread Name: pool-1-thread-2Task Completed! Thread Name: pool-1-thread-2Task Completed! Thread Name: pool-1-thread-1