1

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

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

我已将执行方法更改如下:

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

4

1 回答 1

1

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

我有同样的问题,你可以点击链接:

单击以关注主题。

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

于 2013-10-10T06:36:49.187 回答