简单学习Java自带的线程池

为了实现在并发环境下异步执行任务,我们会使用线程,为了避免频繁创建和销毁线程带来资源消耗,我们会用到线程池。

下面介绍Jdk的4种线程池并配以代码测试:

先定义一个线程类

简单学习Java自带的线程池_第1张图片

1)定长线程池:FixedThreadPool

每来一个新的任务,线程池首先判断池里的线程数量有没有达到设定值,如果没有,则会创建一个新的线程,如果已经达到了设置值,线程池会再去判断池中有没有空闲的线程,有则使用,没有的话,新来的任务则会在队列里排队。

测试代码:

简单学习Java自带的线程池_第2张图片
运行结果:
简单学习Java自带的线程池_第3张图片

2)缓存线程池:CachedThreadPool

每来一个新的任务,线程池首先判断池里有没有空闲的线程,有则重用,没有则创建新的线程。如果一个线程在池里空闲了N秒(默认60S)而没有被重用,将会被线程池移除,释放资源。

源码中这样注释:

为什么非常适用于“短期任务”?

因为short-lived的任务才会很快执行完,线程才会空闲出来,新来的任务才会去重用空闲的线程,否则线程池就会不断地去创建新的线程,或者造成排队等待的任务越来越多,造成服务器压力越来越大。

测试代码:

简单学习Java自带的线程池_第4张图片
运行结果:
简单学习Java自带的线程池_第5张图片

3)单线程池:SingleThreadExecutor

线程池里只有一个线程,反复使用

测试代码:

简单学习Java自带的线程池_第6张图片
运行结果:

4)预期的线程池:ScheduledThreadPool

可以延迟并周期性执行任务的线程池,对于同一个任务在周期性执行时,不一定用的都是同一个线程,线程池每次在执行任务时,只会优先重用空闲的线程。

测试代码:

简单学习Java自带的线程池_第7张图片
运行结果:
简单学习Java自带的线程池_第8张图片
.学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群346942462,我们一起学Java!

你可能感兴趣的:(简单学习Java自带的线程池)