一、概述java.util.concurrent中有非常方便的线程池实现,提供的Executor框架包含用于管理实现Runnable任务,Executors类提供了许多不同类型的Executor实现的静态工厂方法。
二、实例public class MyTask implements Runnable{ public void run(){ System.out.println(Thread.currentThread().getName() + "任务正在运行");}}①固定大小线程池newFixedThreadPoolpublic class FixedThreadPoolTest
{ public static void main(String[] args){ // 创建固定大小为5的线程池ExecutorService threadPool = Executors.newFixedThreadPool(5);// 模拟执行了20个任务,而线程池中只有5个线程for (int i = 0; i < 20; i++){ try{ // 一次执行五个任务,其余任务排队Thread.sleep(20);threadPool.execute(new MyTask());}catch (Exception e){ e.printStackTrace();}}threadPool.shutdown();}}pool-1-thread-1任务正在运行pool-1-thread-2任务正在运行pool-1-thread-3任务正在运行pool-1-thread-4任务正在运行pool-1-thread-5任务正在运行pool-1-thread-1任务正在运行pool-1-thread-2任务正在运行pool-1-thread-3任务正在运行pool-1-thread-4任务正在运行pool-1-thread-5任务正在运行pool-1-thread-1任务正在运行pool-1-thread-2任务正在运行pool-1-thread-3任务正在运行pool-1-thread-4任务正在运行pool-1-thread-5任务正在运行pool-1-thread-1任务正在运行pool-1-thread-2任务正在运行pool-1-thread-3任务正在运行pool-1-thread-4任务正在运行pool-1-thread-5任务正在运行
②不限制大小的线程池newCachedThreadPoolpublic class CachedThreadPool
{ public static void main(String[] args){ // 不限制线程池的大小// 当以前创建的线程可以使用时会重新使用ExecutorService threadPool = Executors.newCachedThreadPool();for (int i = 0; i < 20; i++){ threadPool.execute(new MyTask());}threadPool.shutdown();}}pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-2任务正在运行pool-1-thread-4任务正在运行pool-1-thread-3任务正在运行pool-1-thread-2任务正在运行pool-1-thread-1任务正在运行pool-1-thread-6任务正在运行pool-1-thread-4任务正在运行pool-1-thread-1任务正在运行pool-1-thread-3任务正在运行pool-1-thread-4任务正在运行pool-1-thread-1任务正在运行pool-1-thread-5任务正在运行pool-1-thread-7任务正在运行pool-1-thread-3任务正在运行pool-1-thread-2任务正在运行pool-1-thread-8任务正在运行pool-1-thread-6任务正在运行 ③单线程池newSingleThreadExecutorpublic class SingleThreadPool{ public static void main(String[] args){ // 单线程池ExecutorService threadPool = Executors.newSingleThreadExecutor();for (int i = 0; i < 20; i++){ threadPool.execute(new MyTask());}threadPool.shutdown();}}pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行pool-1-thread-1任务正在运行
④定时任务线程池newScheduledThreadPoolpublic class ScheduledPool
{ public static void main(String[] args){ // 定时任务线程池ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(3);// 三秒后运行任务threadPool.schedule(new MyTask(), 3, TimeUnit.SECONDS);// 五秒钟后运行,每隔两秒钟执行一次threadPool.scheduleAtFixedRate(new MyTask(), 5, 2, TimeUnit.SECONDS);}}