java中有哪几种线程池

(1)缓存型池子,先查看池中有没有以前建立的线程,如果有,就reuse,如果没有,就建立一个新的线程加入池中;(2)缓存型池子,通常用于执行一些生存周期很短的异步型任务;因此一些面向连接的daemon型server中用得不多;(3)能reuse的线程,必须是timeout IDLE内的池中线程,缺省timeout是60s,超过这个...
java中有哪几种线程池
一:newCachedThreadPool
(1)缓存型池子,先查看池中有没有以前建立的线程,如果有,就reuse,如果没有,就建立一个新的线程加入池中;
(2)缓存型池子,通常用于执行一些生存周期很短的异步型任务;因此一些面向连接的daemon型server中用得不多;
(3)能reuse的线程,必须是timeout IDLE内的池中线程,缺省timeout是60s,超过这个IDLE时长,线程实例将被终止及移出池。
(4)注意,放入CachedThreadPool的线程不必担心其结束,超过TIMEOUT不活动,其会自动被终止

二:newFixedThreadPool
(1)newFixedThreadPool与cacheThreadPool差不多,也是能reuse就用,但不能随时建新的线程
(2)其独特之处:任意时间点,最多只能有固定数目的活动线程存在,此时如果有新的线程要建立,只能放在另外的队列中等待,直到当前的线程中某个线程终止直接被移出池子
(3)和cacheThreadPool不同,FixedThreadPool没有IDLE机制(可能也有,但既然文档没提,肯定非常长,类似依赖上层的TCP或UDP IDLE机制之类的),所以FixedThreadPool多数针对一些很稳定很固定的正规并发线程,多用于服务器
(4)从方法的源代码看,cache池和fixed 池调用的是同一个底层池,只不过参数不同:
fixed池线程数固定,并且是0秒IDLE(无IDLE)
cache池线程数支持0-Integer.MAX_VALUE(显然完全没考虑主机的资源承受能力),60秒IDLE

三:ScheduledThreadPool
(1)调度型线程池
(2)这个池子里的线程可以按schedule依次delay执行,或周期执行
四:SingleThreadExecutor
(1)单例线程,任意时间池中只能有一个线程
(2)用的是和cache池和fixed池相同的底层池,但线程数目是1-1,0秒IDLE(无IDLE)2018-03-22
mengvlog 阅读 26 次 更新于 2025-09-09 16:09:18 我来答关注问题0
  • 一:newCachedThreadPool (1)缓存型池子,先查看池中有没有以前建立的线程,如果有,就reuse,如果没有,就建立一个新的线程加入池中;(2)缓存型池子,通常用于执行一些生存周期很短的异步型任务;因此一些面向连接的daemon型server中用得不多;(3)能reuse的线程,必须是timeout IDLE内的池中线程,缺...

  •  深空见闻 java中能用多个线程池怎么设置参数

    1. 核心线程数(corePoolSize)设置方法:通过ThreadPoolExecutor的构造函数或setCorePoolSize方法设置。说明:核心线程数是线程池中常驻的线程数量。对于不同类型的任务(如CPU密集型或IO密集型),核心线程数的设置应有所不同。2. 最大线程数(maximumPoolSize)设置方法:通过ThreadPoolExecutor的构造函数...

  • 1. FixedThreadPool:创建一个固定数量的线程池,可以指定线程的数量。每个线程在完成任务后不会自动退出,而是等待新的任务的到来。适用于任务数量较为稳定,对响应时间要求较高的场景。2. CachedThreadPool:即 newCachedThreadPool,创建一个可无限扩大的线程池,动态调整线程数量以满足任务需求。空闲的线...

  •  翡希信息咨询 线程池的创建方式有几种

    线程池的创建方式主要有以下几种:使用ThreadPoolExecutor类:简介:这是Java中最常见和灵活的线程池创建方式。ThreadPoolExecutor提供了丰富的参数配置,允许开发者精确控制线程池的行为,如核心线程数、最大线程数、线程存活时间、任务队列类型等。优点:高度的可配置性和灵活性,适用于各种并发场景。使用Exec...

  • 下面给你介绍4种线程池:1、newCachedThreadPool:底层:返回ThreadPoolExecutor实例,corePoolSize为0;maximumPoolSize为Integer.MAX_VALUE;keepAliveTime为60L;unit为TimeUnit.SECONDS;workQueue为SynchronousQueue(同步队列)通俗:当有新任务到来,则插入到SynchronousQueue中,由于SynchronousQueue是同步队列,...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部