-
创建线程池:
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler)
- corePoolSize:线程池的基本大小
- maximumPoolSize:线程池最大线程大小
- keepAliveTime:线程空闲后的存活时间
- unit:线程空闲后的存活时间单位
- workQueue:存放任务的阻塞队列
- handler:当队列和最大线程池都满了之后的饱和策略
-
线程池中定义的状态
//运行状态,指可以接受任务执行队列里的任务 private static final int RUNNING = -1 << COUNT_BITS; //指调用了 shutdown() 方法,不再接受新任务了,但是队列里的任务得执行完毕 private static final int SHUTDOWN = 0 << COUNT_BITS; // 指调用了 shutdownNow() 方法,不再接受新任务,同时抛弃阻塞队列里的所有任务并中断所有正在执行任务 private static final int STOP = 1 << COUNT_BITS; //所有任务都执行完毕,在调用 shutdown()/shutdownNow() 中都会尝试更新为这个状态 private static final int TIDYING = 2 << COUNT_BITS; //终止状态,当执行 terminated() 后会更新为这个状态 private static final int TERMINATED = 3 << COUNT_BITS;
-
线程池的execute方法
public void execute(Runnable command) { if (command == null) throw new NullPointerException(); //获取当前线程池的状态 int c = ctl.get(); //当前线程数量小于 coreSize 时创建一个新的线程运行 if (workerCountOf(c) < corePoolSize) { if (addWorker(command, true)) return; c = ctl.get(); } //如果当前线程处于运行状态,并且
线程池及Spring Boot举例
最新推荐文章于 2022-10-04 10:44:27 发布