线程池是顶先创建线程的一项技术, 线程池在还没有任务到来之前, 创建一定数量的线程, 放入空闲队列中,然后对这些资源进行复用。减少频繁的创建和销毁对象
jdk1.5 版本以上版本提供了现成的线程池
Java里面线程池的顶级接口是Executor,是一个执行线程的工具
线程池接口是ExecutorService
java.util.concurrent包 :并发编程中很常用的实用工具类
Executor接口
执行已提交的Runnable任务的对象
ExecutorService接口
ExecutorService提供了管理终止的方法,以及可以为跟踪一个或多个异步任务执行状况而生成的 Future方法
Executors类
此包中所定义的Executor 、 ExecutorService等工厂和实用方法。
package com.vince; import java.util.concurrent.*; /** * jdk1.5 以上才能使用,方便 * 前面两种较常用。。。 */ public class ThreadDemo5 { public static void main(String[] args) { //创建线程池(4种) //1.创建一个单线程的线程池 //ExecutorService es= Executors.newSingleThreadExecutor(); //创建固定大小的线程池 //ExecutorService es= Executors.newFixedThreadPool(1); //创建一个可缓存的线程池,如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60s不执行任务)的线程,当任务数增加时, //此线程池又可以智能的添加新线程来处理,此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小 //ExecutorService es=Executors.newCachedThreadPool(); //ExecutorService es= Executors.newScheduledThreadPool(3); ScheduledExecutorService es=Executors.newScheduledThreadPool(3); //ExecutorService executorService = Executors.newCachedThreadPool(); //es.execute(new MyRunable6()); //es.execute(new MyRunable6()); es.schedule(new MyRunable6(),3000,TimeUnit.MILLISECONDS); es.shutdown(); } } class MyRunable6 implements Runnable{ public void run(){ for(int i=0;i<10;i++){ System.out.println(Thread.currentThread().getName()+"----"+i); try{ Thread.sleep(300); }catch(InterruptedException e){ e.printStackTrace(); } } } /** * 1.进程与线程 * 2.线程的基本使用 * 3.线程休眠 * 4.join与中断线程 * 5.守护线程与yield * 6.其他方法与优先级 * 7.线程同步 * 8.死锁 * 9.生产者与消费者应用案例 * 10.线程生命周期 * 11.线程池 */ }