java-----线程池
public class Test3 {public static void main(String[] args) throws IOException {//获取线程池对象ExecutorService pool = Executors.newCachedThreadPool();//提交任务pool.submit(new MyThread());pool.submit(new MyThread());pool.submit(new MyThread());pool.submit(new MyThread());//销毁线程池pool.shutdown();}}
public class MyThread implements Runnable {@Overridepublic void run() {for (int i = 0; i <= 100; i++) {System.out.println(Thread.currentThread().getName()+"----"+i);}}
}
线程池的配置
线程池的配置通常包括以下几个参数:
- 核心线程数:线程池中保持的最小线程数。
- 最大线程数:线程池中允许的最大线程数。
- 任务队列:用于存放待执行任务的队列。
- 线程空闲时间:当线程池中的线程数量超过核心线程数时,多余的空闲线程在终止前等待新任务的最长时间。
- 拒绝策略:当任务队列已满且线程池中的线程数达到最大线程数时,如何处理新提交的任务。
自定义线程池:
public class Test3 {public static void main(String[] args) throws IOException {//获取线程池对象ThreadPoolExecutor poolExecutor=new ThreadPoolExecutor(3,//核心线程数量,不能小于06,//最大线程数,不能小于0,最大数量>=核心线程数量60,//空闲线程最大存活时间TimeUnit.SECONDS,//时间单位new ArrayBlockingQueue<>(3),//任务队列Executors.defaultThreadFactory()//创建线程工厂);}}
线程池的拒绝策略
常见的拒绝策略包括:
- AbortPolicy:直接抛出异常,拒绝新任务。
- CallerRunsPolicy:由提交任务的线程直接执行该任务。
- DiscardPolicy:直接丢弃新任务,不抛出异常。
- DiscardOldestPolicy:丢弃队列中最旧的任务,然后尝试重新提交新任务。