一个优秀的软件不会随意的创建、销毁线程,因为创建和销毁线程需要耗费大量的CPU时间以及需要和内存做出大量的交互。因此JDK5提出了使用线程池,让程序员把更多的精力放在业务逻辑上面,弱化对线程的开闭管理。

  JDK提供了四种不同的线程池给程序员使用  

  首先使用线程池,需要用到ExecutorService接口,该接口有个抽象类AbstractExecutorService对其进行了实现,ThreadPoolExecutor进一步对抽象类进行了实现。最后JDK封装了一个Executor类对ThreadPoolExecutor进行实例化,因此通过Executor能够创建出具有如下四种特性的线程池

  1. 无下界线程池

        ExecutorService threadPool= Executors.newCachedThreadPool( ); 当线程数不足时,线程池会动态增加线程进行后续的任务调度

  2. 固定线程数的线程池

         ExecutorService threadPool= Executors.newFixedThreadPool(3); 创建具有固定线程数:3个的线程池

  3. 单线程线程池

   ExecutorService threadPool= Executors.newSingleThreadScheduledExecutor( );创建单例线程池,确保线程池内恒定有1条线程在工作

  4. 调度线程池

     ScheduledExecutorService threadPool= Executors.newSingleThreadScheduledExecutor( ); 创建一个定长线程池,定时或周期性地执行任务

 1 package com.scl.thread.threadPool;
 2 
 3 import java.util.concurrent.Executors;
 4 import java.util.concurrent.ScheduledExecutorService;
 5 import java.util.concurrent.TimeUnit;
 6 
 7 public class ScheduledThreadPool
 8 {
 9     public static void main(String[] args)
10     {
11         // 创建定时调度线程池
12         ScheduledExecutorService threadPool = Executors.newSingleThreadScheduledExecutor();
13         // 定时执行Runnable
14         threadPool.scheduleAtFixedRate(new Runnable()
15         {
16 
17             @Override
18             public void run()
19             {
20                 System.out.println("do some big Scheduled");
21             }
22         }, 10, 3, TimeUnit.SECONDS);
23     }
24 }
定时调度线程池

相关文章: