纯手写线程池
发布日期:2021-06-30 12:37:03 浏览次数:2 分类:技术文章

本文共 2528 字,大约阅读时间需要 8 分钟。

在这里插入图片描述

线程池定义类

package com.nobody;import java.util.ArrayList;import java.util.List;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/** * 自定义线程池 * 本实现没考虑空闲线程处理,拒绝策略等,后续再将这部分补上。 * 有兴趣者可以自行实现下。 *  * @author Μr.ηobοdy * * @date 2020-06-02 * */public class MyExecutorService {
// 保持一直运行的线程 private List
workThreads; // 存放未执行任务的队列容器 private final BlockingQueue
workQueue; // 标志线程池关闭与否 private boolean isWorking = true; // 构造函数,初始化线程池 public MyExecutorService(int corePoolSize, int queueCapacity) {
workThreads = new ArrayList<>(corePoolSize); workQueue = new LinkedBlockingQueue<>(queueCapacity); // 提前预热创建固定数量的线程,保持运行状态 for (int i = 0; i < corePoolSize; i++) {
WorkThread workThread = new WorkThread(); workThread.start(); workThreads.add(workThread); } } // 调用execute执行任务,实际上先放入任务队列中 public boolean execute(Runnable task) {
if (null != task) {
return workQueue.offer(task); } return false; } // 优雅关闭线程池 public void shutdown() {
isWorking = false; } // 工作线程类 class WorkThread extends Thread {
@Override public void run() {
// 如果线程池未关闭,并且任务队列还有未执行任务,则线程不断从任务队列取任务,如果能取到则执行任务的run方法 while (isWorking || !workQueue.isEmpty()) {
Runnable task = workQueue.poll(); if (null != task) {
task.run(); } } } }}

测试类

package com.nobody;/** * 测试线程池 *  * @author Μr.ηobοdy * * @date 2020-06-02 * */public class Main {
public static void main(String[] args) {
// 1.创建线程池 MyExecutorService myExecutorService = new MyExecutorService(5, 100); // 2.创建15个任务 for (int i = 0; i < 15; i++) {
final int finalI = i; myExecutorService.execute(new Runnable() {
@Override public void run() {
System.out.println(Thread.currentThread().getName() + " 执行... i=" + finalI); } }); } // 3.关闭线程池 myExecutorService.shutdown(); }}

测试结果

Thread-0 执行... i=0Thread-2 执行... i=4Thread-2 执行... i=6Thread-4 执行... i=3Thread-1 执行... i=2Thread-1 执行... i=9Thread-3 执行... i=1Thread-3 执行... i=11Thread-1 执行... i=10Thread-4 执行... i=8Thread-2 执行... i=7Thread-0 执行... i=5Thread-4 执行... i=14Thread-1 执行... i=13Thread-3 执行... i=12

demo工程下载地址:

转载地址:https://javalib.blog.csdn.net/article/details/106490734 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:23种设计模式之策略模式
下一篇:测试TXIubm9ib2R5

发表评论

最新留言

不错!
[***.144.177.141]2024年05月05日 13时08分36秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章