0

我正在使用 java api 中的 threadPoolExecutor 类来处理我的所有线程。目前我有 5 个线程可以存在于线程池中。我的线程都在做同样的任务。他们正在向数据库发出请求,并等待回复。有时数据库有一段时间没有回复。这意味着这些线程卡在线程池中等待。

我想知道有没有办法在线程池中的线程上设置超时。因此,如果一个线程运行超过半小时,那么线程池将杀死它并处理队列中的下一个线程。我不

目前,线程池中的线程有自己的计时器任务,该任务写入日志,说明线程花费了 30 多分钟。我正在想办法杀死需要这么长时间的线程。

我怎样才能做到这一点 !

4

2 回答 2

1

保活次数

如果池当前有多个 corePoolSize 线程,多余的线程如果空闲时间超过 keepAliveTime(请参阅 getKeepAliveTime(java.util.concurrent.TimeUnit))将被终止。这提供了一种在池没有被积极使用时减少资源消耗的方法。如果池稍后变得更加活跃,则将构造新线程。也可以使用方法 setKeepAliveTime(long, java.util.concurrent.TimeUnit) 动态更改此参数。使用 Long.MAX_VALUE TimeUnit.NANOSECONDS 的值可以有效地禁止空闲线程在关闭之前终止。默认情况下,keep-alive 策略仅适用于超过 corePoolSizeThreads 的情况。但是方法 allowCoreThreadTimeOut(boolean) 也可用于将此超时策略应用于核心线程,

来自ThreadPoolExecutor Java 文档

于 2012-08-03T05:24:01.647 回答
0

1.使用CachedThreadPool

2. CachedThreadPool 将池化,将从定义的线程数开始。现在根据需要它可以跨越新线程。

3.令人惊奇和你想要的特性CachedThreadPool当一个线程在 60 秒内没有参与任何活动时,它就会被杀死。

于 2012-08-03T05:02:32.840 回答