Java教程

任务队列

本文主要是介绍任务队列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、线程池

测试类TestTask运行时会启动多个缓存线程池,缓存线程池的数量根据服务器配置动态获取;

二、优缺点

优点:可异步,异步任务量较大,对于中型项目、产品,这样的异步处理机制是完全满足要求的;
缺点:由于任务执行者需要一直监测任务队列是否还有要执行的任务,所以会导致即使缓存线程池超时,也不会自动销毁,消耗资源;

三、结果

运行TestRunable.java:

当前缓存线程池,java.util.concurrent.ThreadPoolExecutor@4e25154f[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
缓存线程池测试
2021-04-25 17:37:40
2021-04-25 17:37:41
2021-04-25 17:37:42
2021-04-25 17:37:43
2021-04-25 17:37:44
缓存线程池已自动关闭,java.util.concurrent.ThreadPoolExecutor@4e25154f[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 1]
缓存线程池中的线程是否已全部执行完,false
缓存线程池是否已关闭,false

运行TestTask.java:

欢迎测试任务队列。。
请输入你本次要执行的异步任务个数:
1
第1个工人已在线
第2个工人已在线
任务队列已激活
第3个工人已在线
任务队列已激活
第4个工人已在线
任务队列已激活
任务队列已激活
当前任务计数小于最大任务量,正在唤醒,curr=0,MAX_TASK=1
异步任务队列测试,0
当前线程号:pool-1-thread-2,第1次执行异步任务,finishedTasks={pool-1-thread-2=1}
请输入你本次要执行的异步任务个数:
2
异步任务队列测试,0
当前任务计数小于最大任务量,正在唤醒,curr=0,MAX_TASK=1
异步任务队列测试,1
当前线程号:pool-1-thread-1,第1次执行异步任务,finishedTasks={pool-1-thread-1=1, pool-1-thread-2=1, pool-1-thread-4=1}
当前线程号:pool-1-thread-4,第1次执行异步任务,finishedTasks={pool-1-thread-2=1, pool-1-thread-4=1}
请输入你本次要执行的异步任务个数:
3
异步任务队列测试,0
异步任务队列测试,1
当前线程号:pool-1-thread-1,第2次执行异步任务,finishedTasks={pool-1-thread-1=2, pool-1-thread-2=1, pool-1-thread-4=1}
当前任务计数小于最大任务量,正在唤醒,curr=0,MAX_TASK=1
当前线程号:pool-1-thread-3,第1次执行异步任务,finishedTasks={pool-1-thread-1=2, pool-1-thread-3=1, pool-1-thread-2=1, pool-1-thread-4=1}
异步任务队列测试,2
当前线程号:pool-1-thread-4,第2次执行异步任务,finishedTasks={pool-1-thread-1=2, pool-1-thread-3=1, pool-1-thread-2=1, pool-1-thread-4=2}
请输入你本次要执行的异步任务个数:
0
结束!

四、项目源码见:

https://www.edspace.com.cn/pc/toLookLinkShareUI?shareUrl=21aaca33-e237-6e0a-3390-874c92405e80

*该机制模拟的线程安全中的生产者和消费者案例,关于线程安全的入门了解,可参考【java并发编程应用实例】
*有更多处理任务队列的方法,欢迎留言

这篇关于任务队列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!