这些都是根据我最近看的《Java实战指南多线程编程(设计模式篇)》所得整理。
模式名称
Thread Pool(线程池)模式
模式解决的问题
一个系统中的线程相对与其所要处理的任务而言,总有一种非常有限的资源,线程不仅在其执行任务是需要消耗CPU时间和内存等资源,线程对象本身以及线程所需的调用栈也占用内存,并且Java中创建一个线程往往意味着JVM会创建相应的依赖与宿主机操作系统的本地线程。所以,为每个或者每一批任务创建一个线程以对其进行执行,通常是一种奢侈而不现实的事情。
解决思路
比较常用的做法就是服用一定数量的线程,由这些线程去执行不断产生的任务。
ThreadPool类负责接收和存储任务以及工作者线程的生命管理。submit用于接收一个任务,客户端代码调用该方法想线程池提交一个任务;shutdown关闭线程池对外提供的服务
Promise可借以获取相应任务执行结果的凭据对象。setResule获取相应任务执行结果的执行结果,getResule设置相应任务执行结果的执行结果。
WorkQueue工作队列,实现任务的缓存。enqueue将任务存入队列,dequeue从队列中取出一个任务。
WorkerThread负责任务执行的工作这线程。run逐一从工作队列中取出任务执行,runTask执行制定的任务。