java - 如何让java执行器具有相同的线程?
问题描述
对于某些提议,我需要创建一个Executor
始终具有一个相同线程的线程。
Executors.newFixedThreadPool(1);
Executors.newScheduledThreadPool(1);
上面的示例创建了一个线程池,但是当工作完成时,如果有新任务传递给执行程序,线程将结束并再次创建一个新线程。
所以我想出了这样的事情:
new ThreadPoolExecutor(1,1,Long.MAX_VALUE, TimeUnit.DAYS, new LinkedBlockingQueue<>());
似乎可行,但我怀疑这是否是正确的方法。有人可以展示更好/正确的方法吗?
解决方案
Executors.newSingleThreadExecutor();
从文档(强调我的):
创建一个
Executor
使用单个工作线程在无界队列上操作的线程。(但请注意,如果该单线程在关闭前的执行过程中因失败而终止,则如果需要执行后续任务,则新线程将取代它。)任务保证按顺序执行,并且不会有多个任务处于活动状态在任何给定时间。与其他等效newFixedThreadPool(1)
的不同,返回的执行程序保证不能重新配置以使用额外的线程。
推荐阅读
- javascript - 如何打开一个 div,然后单击将一个 div 添加到列表中的下一个项目
- javascript - 在反应中遇到此引导标头问题
- php - 无法在 laravel 项目中使用除 root 以外的任何用户
- python - 如何找到最小长度为 3 的所有可能连续且不重叠的子列表
- c++ - 没有默认构造函数的继承?
- django - 在Django中,按钮url被意外调用,url请求执行方式不同
- video - 如何正确制作视频循环?
- makefile - make 无法读取自己写入的文件
- laravel - 多个 findForPassport ?例如使用用户名和电话号码登录
- python - 获取未排序的特征值的问题