在ThreadPoolExecutor中的各个线程上花些时间

时间:2012-08-03 04:34:58

标签: java multithreading threadpool

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

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

目前,线程池中的线程有自己的计时器任务,该任务写入日志,表示线程占用时间超过30分钟。我试图想出一种杀掉线程的方法。

我该怎么做!

2 个答案:

答案 0 :(得分:1)

  

保持活力时间

     

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

来自ThreadPoolExecutor Java文档

答案 1 :(得分:0)

1。使用CachedThreadPool

2. CachedThreadPool将汇集,将以定义的线程数启动。现在,根据必要性,它可以跨越新的线程。

3。 CachedThreadPool惊人且您想要的功能就是当一个帖子没有参与任何活动60秒时,然后就被杀了。