ThreadPoolExecutor 中使用了多种设计模式,接下来我们一起来看看线程池中是如何落地各种设计模式的。
闲话不多说,上代码。
1. 策略模式
ThreadPoolExecutor
类使用了策略模式来定义线程池的执行策略。通过构造函数中的参数,可以传入不同的RejectedExecutionHandler
实现类来定义任务拒绝策略。这种设计使得线程池的行为可以根据需求进行灵活配置,实现了策略的可替换性和扩展性
2. 模板方法模式
ThreadPoolExecutor
类内部的runWorker()
方法使用了模板方法模式。该方法定义了线程池中每个工作线程的执行逻辑,并通过beforeExecute()
和afterExecute()
方法提供了钩子方法,可以在子类中进行扩展和定制
3. 单例模式
虽然在源码中没有直接体现单例模式,但线程池的创建通常会使用单例模式,保证在应用程序中只有一个线程池实例存在。单例模式确保线程池在整个应用程序中被共享和管理
4. 工厂方法模式
ThreadPoolExecutor
类的静态工厂方法newFixedThreadPool()
、newCachedThreadPool()
等用于创建不同类型的线程池实例。这些方法通过工厂方法模式隐藏了具体的实例化逻辑,使得创建线程池对象更加简单和灵活
5. 同步器模式
ThreadPoolExecutor
类内部的Worker
类继承了AbstractQueuedSynchronizer
类,用于同步工作线程的执行。同步器模式提供了灵活且可扩展的同步机制,用于实现线程的互斥和协作