Java线程池为什么添加空任务分配给非核心线程?

您所在的位置:网站首页 无法组队cf Java线程池为什么添加空任务分配给非核心线程?

Java线程池为什么添加空任务分配给非核心线程?

2023-06-05 07:17| 来源: 网络整理| 查看: 265

避免线程池出现工作队列有任务,但是没有工作线程处理。

线程池可以设置核心线程数是0个。这样,任务扔到阻塞队列,但是没有工作线程,这不凉凉了么~~

线程池中的核心线程不是一定不会被回收,线程池中有一个属性,如果设置为true,核心线程也会被干掉 在这里插入图片描述 在线程池中,当工作队列已满且活动线程数小于最大线程数时,会创建非核心线程来执行任务。即使是空任务,也可能会被分配给非核心线程来执行。这是因为线程池的设计考虑到以下几个方面的因素:

任务处理的公平性: 空任务也被看作是一种任务,线程池需要公平地处理所有提交的任务。如果只有非空任务才会被分配给非核心线程,那么在任务队列中可能会积累大量的空任务,导致非核心线程一直处于空闲状态,而核心线程却忙于执行非空任务。

响应时间的需求: 线程池旨在提供一种能够快速响应任务的机制。即使是空任务,也可以使线程池保持活跃状态,以便在有实际任务到来时能够立即分配线程进行执行,而不需要额外的线程创建开销。

线程的复用性: 创建和销毁线程都需要一定的时间和资源开销。通过让非核心线程执行空任务,可以使线程池中的线程得到更好的复用,减少频繁地创建和销毁线程的开销。

总的来说,为了保持任务处理的公平性、快速响应时间和线程的复用性,线程池会将空任务也分配给非核心线程执行。

需要注意的是,空任务并不会占用实际的计算资源,因此它们不会对系统的整体性能产生负面影响。但是,在使用线程池时,确保任务的提交是有意义且合理的,避免无谓的空任务提交。

空任务

空任务(Empty Task)指的是在线程池中提交的一个任务,其执行过程中不需要执行任何实际的操作或逻辑。空任务本身不包含需要执行的代码,或者说它的执行代码为空或者只是一个空的循环。

空任务可能是由于以下原因之一而产生:

任务队列的填充: 为了保持任务队列的饱满状态,或者为了占据队列中的位置以防止新任务被拒绝,可能会提交一些空任务。

资源占用: 为了占用一定的系统资源或者保持线程池中的线程处于活跃状态,可能会提交一些空任务。

空任务的实际意义相对较小,因为它们没有具体的业务逻辑或计算任务。在实际应用中,通常会提交具有实际意义的任务来利用线程池的并发执行能力。

需要注意的是,过多的空任务可能会占用线程池的资源,导致性能下降。因此,在使用线程池时,应该确保任务的提交是有意义的,避免无谓的空任务提交。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3