线程池意义
提高线程利用率
降低线程创建和销毁的开销
统一线程管理和监控
线程池组成
线程队列和任务队列
线程队列:存放空闲线程
任务队列:保存等待执行的任务
线程取任务执行
线程池的实现
线程池通过ThreadPoolExecutor类实现
ThreadPoolExecutor类的构造方法
ThreadPoolExecutor(核心线程数,最大线程数,线程存活时间,时间单位,任务队列,拒绝策略)
核心线程数----corePoolSize--------线程池中间活动线程数量
最大线程数----maxinumPoolSize--线程中间最大线程数量
任务队列------workQueue---------等待执行的任务。
线程存活时间-keepAliveTime------线程池中间多余核心线程数量的线程存活时间
线程工厂------threadFactory-------创建新线程
拒绝策略------rejectedExecutionHandler-任务队列满是,新任务的处理策略
策略1-AbortPolicy--抛出异常
策略2-CallerRunsPolicy-任务交由调用线程池的线程执行
策略3-DiscardOldestPolicy-等待时间最长的任务丢弃
策略4-DiscardPolicy-任务丢弃
窗口售票,每个窗口一个线程,模拟5个窗口售票 代码如下:
线程类:
package com.wanmait.demo; public class Saller implements Runnable { private static final int total = 100; //总票数 private static int num = 0; @Override public void run() { // TODO Auto-generated method stub while(num<total) { synchronized(Saller.class) { if(num < total) { num++; System.out.println("卖"+num); } } } } }
线程池类:
package com.wanmait.demo; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub ExecutorService executor = Executors.newFixedThreadPool(5); //创建固定大小的线程池 for (int i = 0; i < 5; i++) { executor.execute(new Saller());//提交任务 //new Saller()创建任务 从线程池中选线程执行任务 } executor.shutdown(); //关闭线程池 } }
0条评论
点击登录参与评论