设计自定义线程池

什么是线程池?

线程池是一组预初始化的工作线程,由线程池管理器进行管理。线程池管理器负责将任务分发给工作线程并管理任务的执行。

线程池不是为每个任务创建一个新线程,这样做可能效率低下并导致资源争用。线程池允许一组线程被创建一次,然后用于多个任务。这可以提高应用程序的性能和可伸缩性。

设计线程池:

要设计一个线程池,我们需要以下实体:

1.线程池:将任务加入阻塞队列。2.阻塞队列:存储任务。3.任务执行器:执行任务。

线程池:

1.线程池类通过构造函数初始化阻塞队列的大小和线程池中可用的线程数。2.在构造函数中,我们创建给定数量的线程,并将任务执行器(实现了Runnable接口)的引用传递给线程并启动它们。3.线程池类具有submit(Runnable runnable)方法,用于将任务加入阻塞队列。

import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingDeque;
public class ThreadPool { private BlockingQueue<Runnable> blockingQueue;
// 定义队列的大小和线程数 public ThreadPool(int queueSize, int noOfThreads) { blockingQueue = new LinkedBlockingDeque<>(queueSize); TaskExecutor taskExecutor = null; for (int i = 0; i < noOfThreads; i++) { taskExecutor = new TaskExecutor(blockingQueue); Thread thread = new Thread(taskExecutor); thread.start(); } }
public void submit(Runnable runnable) { blockingQueue.add(runnable); }}

任务执行器:

1.任务执行器是一个实现了Runnable接口的类,负责从阻塞队列中获取任务并执行它们。

public class TaskExecutor implements Runnable {    private BlockingQueue<Runnable> blockingQueue;
public TaskExecutor(BlockingQueue<Runnable> blockingQueue) { this.blockingQueue = blockingQueue; }
@Override public void run() { while (true) { try { // 从队列中取出任务并执行 Runnable runnable = blockingQueue.take(); runnable.run(); } catch (InterruptedException e) { e.printStackTrace(); } } }}

现在,我们来测试一下我们的线程池:

public class TestThreadPool {    public static void main(String[] args) {        ThreadPool threadPool = new ThreadPool(3, 2);        for (int taskNumber = 1; taskNumber <= 7; taskNumber++) {            TestTask testTask1 = new TestTask(\\\"abcd_\\\" + taskNumber);            threadPool.submit(testTask1);        }    }}

我想补充一点,为什么我们使用阻塞队列来保存任务?

答案很简单,BlockingQueue允许线程在队列为空时等待新任务,并且只在有空间可用时才接受新任务,防止系统一次性处理过多任务导致超载。

原创文章,作者:小技术君,如若转载,请注明出处:https://www.sudun.com/ask/33997.html

(0)
小技术君的头像小技术君
上一篇 2024年4月7日
下一篇 2024年4月7日

相关推荐

  • 速盾高防CDN服务的价格是多少?

    速盾高防 CDN 服务的价格会受到多种因素的影响,例如服务套餐、防护能力、带宽需求、数据中心位置等。因此,具体的价格可能会有所不同。 一般来说,速盾高防 CDN 服务的价格通常是根…

    2024年5月6日
    0
  • 网络安全(黑客)专业术语

    1、【攻击】工具 1. 肉鸡 所谓“肉鸡”是一种很形象的比喻,比喻那些可以被攻击者控制的 电脑、手机、服务器或者其他摄像头、路由器等智能设备,用于发 动网络攻击 例如在 2016 年美国东海岸断网事件中,黑客组织控制了大量的联网摄像头用于发

    2024年6月19日
    0
  • Java 内存模型(JMM) 以及volatile关键字实现原理

    网上JMM 一大堆 但是我觉得 大部分不结合实际代码去一点点了解,看了也只是一知半解,最后都会忘记! 要学习内存模型先来简单看下现代计算机多级并发缓存架构 多级并发缓存架构: 其中…

    CDN资讯 2024年4月14日
    0
  • 高防CDN是什么?

    随着互联网技术的飞速发展,网站和网络应用面临着越来越多的安全威胁,其中最常见和破坏性最大的是分布式拒绝服务(DDoS)攻击。这种攻击可以使网站或网络服务瘫痪,造成巨大的经济损失和信…

    CDN资讯 2024年1月31日
    0

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注