标签:cut catch dex 队列大小 提交 测试 try 添加 lin
线程池相关类
ExecutorService , 线程池接口
Executors 线程池工具类,可以生成不同类型的线程池,
Executors.newFixedThreadPool(3); //固定数量的线程池 corePoolSize=maximumPoolSize=3 Executors.newCachedThreadPool(); //缓存线程池corePoolSize =0,maximumPoolSize=Integer.MAX_VALUE, Executors.newSingleThreadExecutor();//单线程池 corePoolSize=maximumPoolSize=1 Executors.newScheduledThreadPool(3); //支持定时或者周期性任务执行 Executors.newWorkStealingPool(); //支持并行执行任务
Executors.newFixedThreadPool(3);调用的是new ThreadPoolExecutor
所以ThreadPoolExecutor线程池的真正实现类
向线程池提交任务
带返回值
不带返回值
execute(Runnable) 内部的逻辑
1.如果当前线程池内线程数量小于corePoolSize 数量,会创建一个新的线程,去执行该任务
2.如果线程内线程数大于corePoolSize,则会将任务 提交到 workQueue(阻塞队列)。通过offer方法添加,会立即返回是否添加成功
3.如果workQueued队列已经满了,而当前线程池内线程数量小于maximumPoolSize ,
则创建一个新的线程执行该任务,如果当前线程池内线程数量大于maximumPoolSize数量,则执行拒绝策略
测试execute方法
public class TestExecute { public static void main(String[] args) throws InterruptedException { LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(5); ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 10, 3, TimeUnit.SECONDS, queue); // 默认直接抛出异常 for (int i = 1; i <= 17; i++) { Thread.sleep(10); threadPool.execute(new Thread(new MyRunnable(), "Thread—Pool-".concat(i + ""))); System.out.println(" index = "+ i+" , 线程池的线程数量: " + threadPool.getPoolSize()); if (queue.size() > 0) { System.out.println("----------------任务队列大小" + queue.size()); } } threadPool.shutdown(); System.out.println("*********"); } public static class MyRunnable implements Runnable { @Override public void run() { try { //休眠300毫秒 Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } } } }
测试结果
标签:cut catch dex 队列大小 提交 测试 try 添加 lin
原文地址:https://www.cnblogs.com/moris5013/p/10791966.html