繁体   English   中英

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

[英]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);
        }
    }
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM