码迷,mamicode.com
首页 > 编程语言 > 详细

线程池工作流程-验证

时间:2020-07-29 00:47:33      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:exec   system   bsp   unit   ble   time   example   拒绝   cut   

线程池工作流程:

  1、如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务

  2、如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列

  3、如果这时候队列满了,而且正在运行的线程数量小于 maximumPoolSize,那么还是要创建非核心线程立刻运行这个任务

  4、如果队列满了,而且正在运行的线程数量大于或等于 maximumPoolSize,那么默认拒绝策略下线程池会抛出异常RejectExecutionException

实验:拒绝策略 设置默认的 AbortPolicy,另外三种拒绝策略略

public class ThreadPoolTest1 {

public static void main(String[] args) throws InterruptedException {
Runnable runnable = new Runnable() {
@SneakyThrows
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"--"+System.currentTimeMillis());
Thread.sleep(1000);
}
};

ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 2, 5, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(5), new ThreadPoolExecutor.AbortPolicy());
System.out.println("核心线程数:"+pool.getCorePoolSize());
System.out.println("最大线程数:"+pool.getMaximumPoolSize());
System.out.println("线程池大小:"+pool.getPoolSize());
System.out.println("队列大小:"+pool.getQueue().size());
System.out.println("################################");

for (; ; ) {
pool.submit(runnable);
Thread.sleep(100);
System.out.println("核心线程数:"+pool.getCorePoolSize());
System.out.println("最大线程数:"+pool.getMaximumPoolSize());
System.out.println("线程池大小:"+pool.getPoolSize());
System.out.println("队列大小:"+pool.getQueue().size());
System.out.println("-----------------------------------");
}
}

}


实验结果:

Connected to the target VM, address: ‘127.0.0.1:5168‘, transport: ‘socket‘
核心线程数:1
最大线程数:2
线程池大小:0
队列大小:0
################################
pool-1-thread-1--1595947653191
核心线程数:1
最大线程数:2
线程池大小:1
队列大小:0
-----------------------------------
核心线程数:1
最大线程数:2
线程池大小:1
队列大小:1
-----------------------------------
核心线程数:1
最大线程数:2
线程池大小:1
队列大小:2
-----------------------------------
核心线程数:1
最大线程数:2
线程池大小:1
队列大小:3
-----------------------------------
核心线程数:1
最大线程数:2
线程池大小:1
队列大小:4
-----------------------------------
核心线程数:1
最大线程数:2
线程池大小:1
队列大小:5
-----------------------------------
pool-1-thread-2--1595947653791
核心线程数:1
最大线程数:2
线程池大小:2
队列大小:5
-----------------------------------
Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@38082d64 rejected from java.util.concurrent.ThreadPoolExecutor@5f2050f6[Running, pool size = 2, active threads = 2, queued tasks = 5, completed tasks = 0]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
at com.heeexy.example.test.multithread.threadPool.ThreadPoolTest1.main(ThreadPoolTest1.java:30)
pool-1-thread-1--1595947654191
pool-1-thread-2--1595947654793
pool-1-thread-1--1595947655191
pool-1-thread-2--1595947655793
pool-1-thread-1--1595947656191

 

线程池工作流程-验证

标签:exec   system   bsp   unit   ble   time   example   拒绝   cut   

原文地址:https://www.cnblogs.com/wxseng/p/13394427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!