- 博客(4)
- 收藏
- 关注
原创 java线程池allowCoreThreadTimeOut属性空闲时释放常驻核心线程
这时候我们就可以使用allowCoreThreadTimeOut这个属性,当此字段设置为true的时候,空闲线程在达到我们设置的空闲时间后,也会释放,即上面例子中的线程池,最终不仅会释放 5-3 个核心线程以外的线程,3个核心线程也会释放,即剩余0个线程。
2024-03-29 14:59:17 880
原创 使用ExecutorCompletionService,按照任务完成的顺序获取结果
以上代码中提交的任务,模拟的是一种最坏的任务耗时情况,从10秒~1秒,从执行结果看,是阻塞了10秒,也就是阻塞到执行时间最长的任务执行完成后,才能拿到首次执行结果,即碰到某个耗时慢的任务后,会等到此任务执行完成后,才继续获取后续任务的执行结果;ExecutorCompletionService 中添加了一个队列,来存放线程池已经完成的任务,take方法是从队列中获取已经完成的任务;从运行结果看,获取阻塞结果时,并没有因为碰到执行最长的任务而一致阻塞,而是逐个取到了最先执行完成的任务;
2024-03-27 00:00:04 282
原创 java线程池创建后,核心线程是否已经创建了
3、prestartAllCoreThreads(),会给线程池创建线程池的核心线程数配置大小的线程数,也就是10个,第三行输出9,是因为前面prestartCoreThread()已经创建了1个线程,prestartAllCoreThreads()只创建9个线程,就达到核心线程数的配置10个了,因此只创建了9个线程;总结:线程池创建时,核心线程并不会被立马创建,可以通过调用prestartCoreThread()和prestartAllCoreThreads()为线程池初始化好核心线程;
2024-03-26 17:31:21 499
原创 mysql主键为varchar类型,查询不带单引号,不仅仅是隐式转换的问题
发生了隐式转换,当字段为varchar类型,而条件数值为数字类型时,mysql会尝试将数据库中id都转换成double类型与对应的条件数值进行比对;1、影响数据范围错误,数据范围相当于 update table set a = 1 where id like ‘1915266715287552%’;2、及时id的数据范围是小于等于16位的数字,也要加单引号,防止索引失效,发生全表扫描;1、如果主键id是varchar类型,按id修改时,数值一定要用单引号引起来使用。
2024-03-26 16:15:42 288
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人