我正在使用java api中的threadPoolExecutor类来处理我的所有线程。目前我有3个线程可以存在于线程池中。我的线程都在做同样的事情。他们正在向数据库发出请求,他们等待回复。有时数据库不会回复一段时间。这意味着这些线程卡在线程池中等待。
我想知道有没有办法在线程池中的线程上设置超时。因此,如果一个线程运行超过半小时,那么线程池将终止它并处理队列中的下一个线程。我不
目前,线程池中的线程有自己的计时器任务,该任务写入日志,表示线程占用时间超过30分钟。我试图想出一种杀掉线程的方法。
我该怎么做!
答案 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秒时,然后就被杀了。