我正在使用ThreadPoolExecutor,并且需要将workerID与每个线程相关联,因此当线程死亡时,应该删除该ID,并且在创建新线程时应该使用该ID。但是我如何确保线程死亡。并执行某些事情。
不能依赖run方法完成,因为keepAliveTime是15分钟。
有没有办法确保这一点?
ThreadFactory
newThread方法是这样的:
public Thread newThread(Runnable r)
{
Thread thread = new Thread(group, r, (new StringBuilder()).append(namePrefix).append(threadNumber.getAndIncrement()).toString(), 0L);
if(thread.isDaemon())
{
thread.setDaemon(false);
}
thread.setName((new StringBuilder()).append("Thread name : ").append(name).append(" WorkerId : ").append(getNextWorkerID());
return thread;
}
getNextWorkerID
返回newxtWorkerID。
答案 0 :(得分:1)
如何使用保持ThreadPoolExecutor
且值为workerID的实现来扩展Map<Runnable, String>
?您可以覆盖afterExecute(Runnable, Throwable)
并从此方法中的Map
中删除workerID。