gpt4 book ai didi

java - 重写Executor的execute方法

转载 作者:太空宇宙 更新时间:2023-11-04 07:21:16 27 4
gpt4 key购买 nike

我需要重写执行器的执行方法,我需要更改仅当队列已满时才会创建超过核心池大小的线程的行为。

但是,在实时应用程序中,这种行为是不可取的,因为它可能导致队列中存在的任务无休止的等待。

我已更改执行方法如下:

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 -> Non-CoreThreads -> 队列而不是 CoreThreads -> 队列 -> Non-CoreThreads。

最佳答案

我不明白为什么您需要更改执行方法,我认为最大池大小不应该优先于队列,正如我在代码中看到的那样。

我遇到了同样的问题,您可以点击链接:

click to follow the thread.

我觉得这应该是你最后的选择,先尝试别的东西。

关于java - 重写Executor的execute方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19288538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com