专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

实现线程池(二)最简单的线程池

我们首先实现一个能简单执行任务的线程池,很明显,这样的线程池需要具备两个要素,一个是工作线程,一个是任务队列

//工作线程
private List<Thread> workers;
//任务队列
private final BlockingQueue<Runnable> taskQueue;

工作线程用于执行具体的每一个任务,而任务队列负责接收要执行的任务。

线程池实例化的时候,确定线程池工作线程个数poolSize和最大允许接受任务的个数maxAccept

public MyThreadPool(int poolSize, int maxAccept) {
    workers = new ArrayList<>(poolSize);
    taskQueue = new ArrayBlockingQueue<>(maxAccept);
    this.poolSize = poolSize;
    this.maxAccept = maxAccept;
}

工作线程在线程池的初始化方法中创建和启动

public synchronized void init() {
    if(!inited) {
        for (int i = 0; i < this.poolSize; i++) {
            Thread t = new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        try {
                            //从任务队列中取任务,然后执行
                            Runnable runnable = taskQueue.take();
                            runnable.run();
                        } catch (InterruptedException e) {
                        }
                    }
                }
            });
            workers.add(t);
            t.start();
        }
    } else {
        return;
    }
    inited = true;
}

线程池对外提供执行任务的方法

public void execute(Runnable runnable) throws RejectException{
    if(this.taskQueue.size() < maxAccept) {
        this.taskQueue.add(runnable);
    } else {
        //线程池任务队列满了,抛出拒绝异常
        throw new RejectException();
    }
}

实例化线程池,并调用

public static void main(String[] args) {
    MyThreadPool myThreadPool = new MyThreadPool(5,50);
    myThreadPool.init();
    try {
        myThreadPool.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println("任务被执行了");
            }
        });
    } catch (MyThreadPool.RejectException e) {
    }
}

以上,我们实现了一个最简单的线程池

按照我们上一章中提到的,一个完备的线程池除了任务的执行之外,还应该具备以下条件

  • 线程的生命周期管理,主要包括创建和回收
  • 线程池的生命周期,初始化,执行,销毁等

显然,本例子中,并没有完整地体现线程和线程池的生命周期,我们实现的还有缺陷,下一章针对本部分进行完善。

文章永久链接:https://tech.souyunku.com/36473

未经允许不得转载:搜云库技术团队 » 实现线程池(二)最简单的线程池

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们