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

Java Threadpool handle unlimited queued threads?

我正在测试我的服务器,它有一个连接线程池。

public class Test
{
    public static final void main(String[] args)
    {
        ThreadPoolExecutor threadPoolExecutorSentMessage = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(),
                    100,
                    5,
                    TimeUnit.SECONDS,
                    new LinkedBlockingQueue<Runnable>());

        ConnctionListener con = new ConnctionListener() //ignore this, included it for other usage.
        {
            public void onStartSendingMessages()
            {
                while(true)
                {
                    for(int i = 0; i < 50; i++)
                    {
                        threadPoolExecutorSentMessage.execute(new TestT("Message: " + i));
                    }
                }
            }
        };

        con.onStartSendingMessages();

        //new Thread(new MessageConnectionWaiter(con)).start();
    }




    private static class TestT implements Runnable
    {
        private String msg;

        public TestT(String msg)
        {
            this.msg = msg;
        }

        @Override
        public void run()
        {
            System.out.println(msg);
        }
    }
}

它不是服务器代码,而是我用代码测试线程是如何工作的。 当我开始无限线程时(就像我的服务器的许多连接),有一个问题,它卡住了,没有任何反应。我虽然线程池正在阻止新任务,但在线程池对新线程可用 space 之前。有人可以告诉如何处理这样的事情吗?我试图减少最大数量。线程,但它没有解决我的问题。我只希望线程池运行线程,无论有多少线程在等待。

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