我需要覆盖执行程序的执行方法,我需要更改线程超过核心池大小的行为只有在队列已满时才会创建。
然而,在实时应用程序中,这种行为是不可取的,因为它可能导致队列中存在任务的无休止等待。
我已经更改了execute方法,如下所示:
public void execute(Runnable command)
{
System.out.println("ActiveCount : " + getActiveCount() + " PoolSize : " + getPoolSize()
+ " QueueSize : " + getQueue().size() +" Idle Threads : " +(getPoolSize()-getActiveCount()));
int c = ctl.get();
if (workerCountOf(c) < corePoolSize) {
if (addWorker(command, true))
return;
c = ctl.get();
}
else if (isRunning(c) && workQueue.offer(command))
{
int recheck = ctl.get();
if (getActiveCount() < workerCountOf(recheck) && isRunning(recheck) && workQueue.offer(command)) {
return;
}
if (addWorker(command, false)) {
return;
}
else if (! isRunning(recheck) && remove(command))
{
reject(command);
}
else if (workerCountOf(recheck) == 0)
{
addWorker(null, false);
}
}
else
{
reject(command); // add task to the queue
}
}
尝试实现: CoreThreads - &gt;非CoreThreads - &gt;队列而不是CoreThreads - &gt;队列 - &gt;非CoreThreads。
答案 0 :(得分:1)
我不明白为什么你需要更改执行方法,我认为,最大池大小不应该优先于队列,我可以在你的代码中看到。
我遇到了同样的问题,您可以点击链接:
我觉得这应该是你的最后选择,先尝试别的。