Java Threadpool处理无限排队的线程?

时间:2018-07-22 13:30:22

标签: java multithreading threadpoolexecutor

我正在测试我的服务器,该服务器具有用于连接的线程池。

//Start listing variables for use in array.
var art1 = document.getElementById("article1");
var button1 = document.getElementById("btn1");

var art2 = document.getElementById("article2");
var button2 = document.getElementById("btn2");

var art3 = document.getElementById("article3");
var button3 = document.getElementById("btn3");

var articleArray = [art1, art2, art3];
var buttonArray = [button1, button2, button3];

function mediaQuery(x) {
  //If window is under 500px in width.
  if (x.matches) {
    //Begin accordion code
    var initAccordion = function(accordionElement) {
      function handlePanelClick(event) {
        showPanel(event.currentTarget);
      }

      function showPanel(panel) {
        var expandedPanel = accordionElement.querySelector(".active");
        if (expandedPanel) {
          expandedPanel.classList.remove("active");
        }
        panel.classList.add("active");
      }

      var allPanelElements = accordionElement.querySelectorAll(".panel");
      for (var y = 0; y < allPanelElements.length; y++) {
        allPanelElements[y].addEventListener("click", handlePanelClick);
      }
      //showPanel(allPanelElements[0]);
    }
    initAccordion(document.getElementById("contentWrapper"));

  } else { // If window if is over 500px in width.  
    //Begin button code.
    var createfunc = function(i) {
      return function() {
        document.getElementById("fillMe").innerHTML = articleArray[i].innerHTML;
      };
    }
    for (let i = 0; i < articleArray.length; i++) {
      let button = buttonArray[i];
      button.addEventListener("click", createfunc(i));
    }
  }
}

//Declare media query and add listener.
var x = window.matchMedia("(max-width: 500px)")
mediaQuery(x) // Call listener function at run time
x.addListener(mediaQuery) // Attach listener function on state changes

它不是服务器代码,而是对代码进行即时测试。 当我启动无限线程(例如与服务器的许多连接)时,出现了一个问题,即卡住了,什么也没发生。我虽然认为线程池在线程池有可用空间容纳新线程之前阻止了新任务。有人可以告诉我如何处理这样的事情吗?我试图减少最大数量。线程,但不能解决我的问题。我只是希望无论等待多少线程,线程池都运行线程。

1 个答案:

答案 0 :(得分:0)

这不是导致问题的线程数。这是您要添加到工作队列中的任务数。您正在无限循环添加任务。并且工作队列具有容量,链接队列具有最大容量Integer.MAX_VALUE。添加了许多任务后,主线程开始等待在工作队列中清空空间。在您的线程池线程完成任何任务的执行并将任务从队列中删除后,该空间将变为可用,并且主线程只有在队列中有任务的空间时才能添加任务