线程池实现原理及测试实例

阅读: 评论:0

线程池实现原理及测试实例

线程池实现原理及测试实例

我们知道,Java创建线程池的方式有四种:

  • newFiexedThreadPool(int Threads):创建固定数目线程的线程池。
  • newCachedThreadPool():创建一个可缓存的线程池,调用execute 将重用以前构造的线程(如果线程可用)。如果没有可用的线程,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有 60 秒钟未被使用的线程。
  • newSingleThreadExecutor()创建一个单线程化的Executor。
  • newScheduledThreadPool(int corePoolSize)创建一个支持定时及周期性的任务执行的线程池,多数情况下可用来替代Timer类。
    其实这四种方式都是在底层调用了ThreadPoolExecutor()方法。

参数含义

  • corePoolSize(核心线程数):线程池实际运用线程数。
  • maximumPoolSize(最大线程数):线程池最多创建的线程数。
  • keepAliveTime:线程存活时间
  • unit:线程存活时间的单位(时分秒…)
  • workQueue:缓存队列

线程池实现原理

原理图如下:


具体源码如下:

测试实例

友情提示:参考上面的原理图可以更加容易理解偶。
import urrent.LinkedBlockingQueue;
import urrent.ThreadPoolExecutor;
import urrent.TimeUnit;public class ThreadPoolTest01 {public static void main(String[] args) {ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1,2,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(3));}
}
class TaskThread implements Runnable {private String threadName;public TaskThread(String threadName) {this.threadName = threadName;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName() + this.threadName);}
}

当向线程池提交三个线程时(小于或等于4个线程):


当向线程池提交5个线程时:


当向线程池提交6个线程时(大于5个线程):

本文发布于:2024-02-01 10:52:26,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170675594836108.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线程   实例   原理   测试
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23