当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Executors newCachedThreadPool()用法及代码示例


Executors 类的 newCachedThreadPool() 方法创建了一个线程池,该池根据需要创建新线程,但会在可用时重用先前构造的线程。

用法

public static ExecutorService newCachedThreadPool()
public static ExecutorService newCachedThreadPool (ThreadFactory threadFactory)

参数

threadFactory - 创建新线程时使用的工厂

返回

新创建的线程池

抛出

NullPointerException

例子1

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ExecutornewCachedThreadPoolExample1  {
	
   public static void main(final String[] arguments) throws InterruptedException {
      ExecutorService excr = Executors.newCachedThreadPool();
      ThreadPoolExecutor mypool = (ThreadPoolExecutor) excr;
//print statement will print the pool size.
      System.out.println("size of mypool:" + mypool.getPoolSize());
      excr.submit(new Threadimpl());
      excr.submit(new Threadimpl());
      System.out.println("Total number threads scheduled):"+ mypool.getTaskCount());
      excr.shutdown();
   }  

   static class Threadimpl implements Runnable {

      public void run() {
         
         try {
            Long num = (long) (Math.random() / 30);
            System.out.println("Thread Name:" +Thread.currentThread().getName());
               TimeUnit.SECONDS.sleep(num);
            System.out.println("after sleep Thread Name:" +Thread.currentThread().getName());
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }
   }
}

输出:

size of mypool:0
Total number threads scheduled):2
Thread Name:pool-1-thread-2
Thread Name:pool-1-thread-1
after sleep Thread Name:pool-1-thread-2
after sleep Thread Name:pool-1-thread-1

例子2

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ExecutornewCachedThreadPoolExample2  {
	
   public static void main(final String[] arguments) throws InterruptedException {
       ThreadFactory ThreadFactory = Executors.defaultThreadFactory();
      ExecutorService excr = Executors.newCachedThreadPool(ThreadFactory);
      ThreadPoolExecutor mypool = (ThreadPoolExecutor) excr;
      System.out.println("size of mypool:" + mypool.getPoolSize());
      for(int i=0 ; i<= 4 ; i++) {
      excr.submit(new Threadimpl());
      }
      excr.shutdown();
   }  

   static class Threadimpl implements Runnable {

      public void run() {
         
         try {
            Long num = (long) (Math.random() / 30);
            System.out.println("Thread Name:" +Thread.currentThread().getName());
               TimeUnit.SECONDS.sleep(num);
            System.out.println("after sleep Thread Name:" +Thread.currentThread().getName());
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }
   }
}

输出:

Thread Name:pool-1-thread-4
after sleep Thread Name:pool-1-thread-4
Thread Name:pool-1-thread-3
after sleep Thread Name:pool-1-thread-3
Thread Name:pool-1-thread-1
after sleep Thread Name:pool-1-thread-1




相关用法


注:本文由纯净天空筛选整理自 Java Executors newCachedThreadPool() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。