首页 > 编程知识 正文

java运行不是内部或外部命令,java线程池阻塞队列

时间:2023-05-04 02:13:39 阅读:20475 作者:2679

什么是线程池?

您常见的数据库连接池、实例池,以及XX池、OO池和各种池都是池化(pooling )思想,简单来说,它们将资源集中在一起进行管理,以实现收入最大化和风险最小化

JVA还提供了自己实现的线程池模型——ThreadPoolExecutor。 应用上面的池化想象,Java线程池会整合和管理多个线程,以最大限度地提高高并发性能,并将手动创建线程的风险降至最低

为了理解这一管理思想,我们现在只需要关注如何构建ThreadPoolExecutor,就可以在publicthreadpoolexecutor (intcorepoolsize )、

int maximumPoolSize,

长期保持活动时间,

时间单元单元,

阻塞队列工作队列,

热故障诊断,

rejectedexecutionhandlerhandler ) {

if(corepoolsize0||

最大化端口大小=0| |

最大化聚合| |

keepAliveTime 0)

thrownewillegalargumentexception (;

if (工作队列==null|=null|) ) ) ) )。

throw new NullPointerException (;

this.ACC=system.getsecuritymanager ()==null?

空:

访问控制器. get context (;

this.corePoolSize=corePoolSize;

this.maximumpoolsize=maximumpoolsize;

this.workQueue=workQueue;

this.keepalive time=unit.to nanos (keepalive time );

this.threadfactory=threadfactory;

this.handler=handler;

}

这样复杂的结构方法在JDK中并不常见,为了更形象地理解这些核心参数,我们将在很多人经历过的春运(北京——上海)中进行说明

序列号参数名称参数说明春运图像说明1corePoolSize表示常驻核心线程数,如果大于0,则本地任务完成后不会丢弃日常固定列车数。 (无论是否春运,这些列车都必须固定运行) )。

2maximumPoolSize表示线程池可以容纳可同时执行的最大线程数。 春运客流量大,临时加开、加开车辆后,总列车次数不超过这个最大值,就会出现行程不合适等问题

3keepAliveTime表示线程池中的线程空闲时间,空闲时间达到此值时线程将被丢弃,留下corePoolSize个线程位置的春运压力后暂时增车(空闲时间为keepalive tition )

4unitkeepAliveTime的时间单位最终转换为【纳秒】。 由于CPU的执行速度以keepAliveTime为单位,因此春运以【日】为计算单位

如果5workQueue请求的线程数大于maximumPoolSize,则线程进入此块列春运压力异常大,即使添加车也无法满足(maximumPoolSize )请求,所有乘车请求都将进入此块

6threadFactory顾名思义,是线程工厂,用于生产同一任务的线程组。 另外,也可以通过它增加前缀名称。 在虚拟机堆栈分析时,如(北京——上海)属于本次列车的所有前缀,表明列车的运输职责

7处理程序执行拒绝策略,如果工作队列达到上限,同时达到最大化策略,则应通过它进行处理。 例如,拒绝、废弃等。 这是一种限制流量的保护措施,因为即使工作队列排队也要达到队列最大在线,maximumPoolSize必须提出无票等拒绝策略

请考虑如果有请求就新建列车,如果请求结束就“废弃”列车,频繁重复这样的操作,这样的代价是不能接受的。

使用线程池,不仅可以手动创建线程,还可以填充无法手动创建线程的空白。 总之,线程池的作用如下:

1 )利用线程池管理和服用线程,控制最大并发行数(难以保证手动创建线程) )。

2 )实现任务线程的队列缓存策略和拒绝机制

3 )实现定时运行、周期性运行等与实践相关的一些功能(如列车指定时间运行)。

4 )隔离线程环境。 例如,如果事务服务和搜索服务位于同一服务器上,并且分别打开两个线程池,则事务线程的资源消耗将显着增加。 因此,通过配置独立的线程池,可以将较慢的事务服务和搜索服务分开,从而防止单个服务线程相互影响

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。