线程池放在局部和成员的区别

1.线程池释放的情况

有核心线程数的线程池,线程池是不会主动释放的,除非线程全都死掉了,线程池才随之释放

 

2.线程池作为局部变量

在调用该方法的时候就会频繁的创建线程池的实例,如果在没有手动调用shutdown方法的情况下会导致内存泄露。如果非要放在局部不可,需要对核心线程设置超时时间并且主动调用shutdown关闭线程池

 

3.线程池作为成员变量

这要分两种情况:

(1)如果宿主对象需要被频繁的创建对象,也就是多例,那么即使线程池放在成员,也会导致存在很多的线程池实例,导致内存泄露。

(2)在springmvc中就不会有这样的情况,因为被spring管理的类都是单例的,那么成员处的线程池使用静态修饰后,内存中只存在一个实例

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Elasticsearch 中,`flush` 线程池和 `refresh` 线程池是两个不同的线程池,用于执行不同的操作。 1. **Flush 线程池**:Flush 操作是将内存中的数据刷新到磁盘上的持久化存储,以确保数据的持久性和一致性。当执行索引、更新或删除操作时,数据首先被写入内存中的缓冲区(称为 translog),然后通过 Flush 操作将缓冲区的数据刷新到磁盘上的索引文件。Flush 操作可以通过 `flush` API 或者自动触发来执行。 Flush 线程池负责执行 Flush 操作,它控制着 Flush 操作的并发度和资源使用。线程池中的线程会按照优先级处理 Flush 请求,确保数据及时地写入磁盘,以避免数据丢失。 2. **Refresh 线程池**:Refresh 操作是使最新的写入操作对搜索可见。Elasticsearch 使用一种叫做 "近实时(Near Real-Time)" 的模型,即在文档被索引后,它并不立即对搜索可见,而是在 Refresh 操作后才能被搜索到。Refresh 操作可以通过 `refresh` API 或者自动触发来执行。 Refresh 线程池负责执行 Refresh 操作,它控制着 Refresh 操作的并发度和资源使用。线程池中的线程会按照优先级处理 Refresh 请求,确保最新的写入操作能够及时对搜索可见。 总结来说,Flush 线程池负责将内存中的数据刷新到磁盘,以确保数据的持久性;而 Refresh 线程池负责使最新的写入操作对搜索可见。 在默认情况下,Flush 和 Refresh 操作都是自动执行的,并且它们在 Elasticsearch 的内部进行管理。但是,您也可以手动触发 Flush 或 Refresh 操作,以满足特定的需求。 请注意,线程池的大小和配置对系统性能有一定影响。根据集群的负载情况和性能需求,您可能需要调整线程池的配置参数来优化系统的性能和资源利用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值