当前位置: 首页 > 知识库问答 >
问题:

重写执行器的执行方法

闾丘永春
2023-03-14

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

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

我已将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


     }
}

尝试实现:核心线程-

共有1个答案

章子航
2023-03-14

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

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

单击以跟随线程。

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

 类似资料:
  • 批处理是重复的动作-无论是作为一个简单的优化,或作为工作的一部分。策划和归纳重复以及提供一个相当于迭代器的框架,Spring Batch提供RepeatOperations接口,这个RepeatOperations接口看起来像是这样: public interface RepeatOperations { RepeatStatus iterate(RepeatCallback callba

  • 如何访问http://localhost:8081/Actuatorendpoint?

  • 问题内容: 我是Java的初学者,并且一直在研究各种解决方案来解决这个问题,并且使自己陷入困境。我尝试过使用Threads,然后发现了这个Timer类,到目前为止,它一直没有成功。如果您可以 使用main方法 发布 可执行代码, 这样我就可以看到它正常工作并从那里开始玩,那将很棒。 启动程序 呼叫 生成随机数并设置Timer相应的时间。 定时器关闭时,再次通话。 可能使用的是:http : //d

  • 我正在将一个旧的java Spring项目重构为springboot,并以传统的war风格部署它。出于某种原因,我必须坚持传统的web.xml来启动应用程序。多亏了Springboot遗产,我可以通过web.xml实现这一点: 此外,我添加了springboot执行器依赖项。应用程序。属性如下所示: 应用程序可以正常启动,但当我尝试从浏览器访问endpoint时,它只返回一个“401需要完全身份验

  • 问题内容: 我在理解同步关键字功能时遇到了一些麻烦。根据Java文档和其他教程,可以说,当使用synced关键字时,在两个线程之间不可能在该方法的语句之间进行交织。 但是,请参见下面的代码。 据我了解,程序输出应始终以线程0和线程1不应交错的方式进行。但是多次执行这段代码后,我得到了交错输出。 请帮助我理解问题。 提前致谢.. 问题答案: 的关键字防止两个线程运行的是在同一对象上同步代码。 您的每