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

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

作者: 9842d350648c | 来源:发表于2019-04-03 20:08 被阅读0次

    在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不再困惑

          本文链接:https://www.haomeiwen.com/subject/frrtiqtx.html