【发布时间】:2021-06-16 11:46:46
【问题描述】:
需要检测两个对象的状态,任务需要是实时的。 run方法使用while(flag)循环,通过改变flag = false来结束线程的生命周期。线程通常需要运行 40 分钟或更长时间。使用线程池会导致核心线程池用完,任务进入队列,因为每个线程要运行40分钟每个线程的执行时间很长而且不固定,所以肯定有很多线程无法及时回复。
我尝试使用新线程(可运行)。 start() 而不是使用线程池ThreadPoolExecutor.execute(runnable),但是我觉得这样,虽然我会在一个并发的HashMap中缓存runnable,但是我总觉得线程不是由线程池管理的,可能会出现异常(比如无故消失)。
如何解决这个问题,或者有什么更好的方法来代替while(flag)的写法。
谢谢你的建议,谢谢!!!!!!
【问题讨论】:
-
自己缓存东西通常是内存泄漏的前兆......如果你不把东西从HashMap中删除,那么那些
Runnable仍然引用的任何对象都不能被GC'd如果您仍然持有 HM.. Executor 是正交问题 -
这 40 分钟发生了什么 - 如果您正在等待结果,可能有比分配线程和等待更好的方法 - 请参阅 stackoverflow.com/questions/14541975/… 获取一些示例/讨论。因为如果你需要处理这 40 分钟中的 100 倍,那么“线程池耗尽”甚至“线程耗尽”是你必须设计的。
标签: java multithreading threadpool