我们都是怎么使用线程池的

目录

0、背景

1、JDK的线程池

1.1 Executors 线程池工具类

1.2 ThreadPoolExecutor 线程池实现

2、Guaval对ThreadPoolExecutor封装

2.1MoreExecutors

2.2ListenableFuture

3、Hutool对ThreadPoolExecutor封装

3.1ExecutorBuilder源码

3.2ThreadUtil源码

3.3ConcurrencyTester源码

4、Spring对ThreadPoolExecutor封装

4.1ThreadPoolTaskExecutor源码

4.2ListenableFuture源码

4.3TaskDecorator源码

5、我对ThreadPoolExecutor封装


0、背景

最近看到很多开源框架关于线程池的封装,就想将这些对线程池的封装进行总结一下,然后,突然有一种感觉,我是自己在重复造轮子,虽然最终实现的基本原理一致,但是实现不够优雅,所以我们从来不缺少创造的能力,在自己知识面宽度不够的情况下,多读读开源框架的源码,对我们会有很大的启发。

1、JDK的线程池

1.1 Executors 线程池工具类

主要提供了创建线程池的工厂方法,方便了我们创建线程池。

1.2 ThreadPoolExecutor 线程池实现

ThreadPoolExecutor是JDK提供的线程池实现类

 

2、Guaval对ThreadPoolExecutor封装

   我觉得Guava对线程池最大贡献的两个类是MoreExecutorsListenableFuture

2.1MoreExecutors

MoreExecutors可以对ExecutorService进行装饰提供一些增强的功能

 

2.2ListenableFuture

ListenableFuture可以对Future进行扩展,提供一些增强的功能,可以增加任务执行之后的回调
 

 

3、Hutool对ThreadPoolExecutor封装

  Hutool进行的封装主要是提供了线程池的建造者ExecutorBuilder,方便开发人员按照自己的需求来创建线程池;此外,他提供了一个合理的TheadUtil外观,更方便我们来使用其对线程池的功能使用。

3.1ExecutorBuilder源码

 

3.2ThreadUtil源码

 

3.3ConcurrencyTester源码

package cn.hutool.core.thread;

import cn.hutool.core.date.TimeInterval;

/**
 * 高并发测试工具类
 *
 * <pre>
 * ps:
 * //模拟1000个线程并发
 * ConcurrencyTester ct = new ConcurrencyTester(1000);
 * ct.test(() -&gt; {
 *      // 需要并发测试的业务代码
 * });
 * </pre>
 *
 * @author kwer
 */
public class ConcurrencyTester {
	private final SyncFinisher sf;
	private final TimeInterval timeInterval;
	private long interval;

	/**
	 * 构造
	 * @param threadSize 线程数
	 */
	public ConcurrencyTester(int threadSize) {
		this.sf = new SyncFinisher(threadSize);
		this.timeInterval = new TimeInterval();
	}

	/**
	 * 执行测试
	 *
	 * @param runnable 要测试的内容
	 * @return this
	 */
	public ConcurrencyTester test(Runnable runnable) {
		timeInterval.start();
		this.sf//
				.addRepeatWorker(runnable)//
				.setBeginAtSameTime(true)// 同时开始
				.start();

		this.interval = timeInterval.interval();
		return this;
	}

	/**
	 * 获取执行时间
	 *
	 * @return 执行时间,单位毫秒
	 */
	public long getInterval() {
		return this.interval;
	}
}

4、Spring对ThreadPoolExecutor封装

4.1ThreadPoolTaskExecutor源码

ThreadPoolTaskExecutor是Spring提供了一个线程池支持类,方便我们将其实例化交给Spring容器管理

4.2ListenableFuture源码

ListenableFuture参考了Guava中的ListenableFuture,可以实现对Futrue的回调,Spring的工程师果然更强,其封装之后,更优雅。

 

 

4.3TaskDecorator源码

   TaskDecorator可以对任务进行装饰,特别是需要从MDC和ThreadLocal中传递线程上下文参数时,提供了一种非常好的扩展机制。

 

5、我对ThreadPoolExecutor封装

   这是我自己重复造的轮子,参考文章:可监控的线程池的工程实践

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李桥s2008100262

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值