一篇文章让你了解四种线程池,学习Java不再困惑

在Java开发中,有时遇到多线程的开发时,直接使用Thread操作,对程序的性能和维护上都是一个问题,使用Java提供的线程池来操作可以很好的解决问题,于是找了下API看到Java提供四种线程池使用,Java通过Executors提供四种线程池,分别为:

1、newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。

2、newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

3、newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

4、newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

下面使用Java代码看一下使用:

(1) newCachedThreadPool

创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程

(2). newFixedThreadPool

创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。Java示例代码:

执行后可以看到效果,固定了线程数为4 ,打印4个数字后会休眠5s后再次打印4个数字。

(3) newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行。示例:

这样就延迟了5秒执行操作。

(4) newSingleThreadExecutor

创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,示例:

这样执行代码后,会使用一个线程一次打印出0 1 2 3 4 间隔5s。

线程池的好处:

1.减少在创建和销毁线程上所花的时间以及系统资源的开销 。

2.避免了造成系统创建大量线程而导致消耗完系统内存。

总结: FixedThreadPool是一个优秀的线程池,使用时需要注意当线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源;CachedThreadPool线程池,当没有任务执行时,会释放调,当有任务时,又要创建,需要 消耗系统开销,而且在大量并发执行时,需要注意控制任务量,避免大量高并发导致系统问题。

你可能感兴趣的:(一篇文章让你了解四种线程池,学习Java不再困惑)