自己动手实现线程池,如何实现一个完整的线程池

首页 > 经验 > 作者:YD1662022-11-03 05:50:25

SingleThreadExecutor

创建单个线程,需要保证顺序执行任务,不会有多个线程活动,使用了LinkedBlockingQueue作为阻塞队列。

自己动手实现线程池,如何实现一个完整的线程池(5)

 CachedThreadPool

会根据需要来创建新的线程,适用于执行很多很短期异步任务的程序,使用了SynchronousQueue作为阻塞队列。

自己动手实现线程池,如何实现一个完整的线程池(6)

需要定期执行周期任务,Timer不建议使用了。

newSingleThreadScheduledExecutor:只包含一个线程,只需要单个线程执行周期任务,保证顺序的执行各个任务。

newScheduledThreadPool 可以包含多个线程的,线程执行周期任务,适度控制后台线程数量的时候。

方法说明:

schedule:只执行一次,任务还可以延时执行。

scheduleAtFixedRate:提交固定时间间隔的任务。

scheduleWithFixedDelay:提交固定延时间隔执行的任务。

两者的区别:

自己动手实现线程池,如何实现一个完整的线程池(7)

scheduleAtFixedRate任务超时:

规定60s执行一次,有任务执行了80S,下个任务马上开始执行

第一个任务 时长 80s,第二个任务20s,第三个任务 50s

第一个任务第0秒开始,第80S结束;

第二个任务第80s开始,在第100秒结束;

第三个任务第120s秒开始,170秒结束

第四个任务从180s开始

参加代码:ScheduleWorkerTime类,执行效果如图:

建议在提交给ScheduledThreadPoolExecutor的任务要住catch异常。

自己动手实现线程池,如何实现一个完整的线程池(8)

上一页123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.