Java,每秒发送多个get请求

时间:2017-07-04 19:14:29

标签: java multithreading concurrency

如何每秒发送N(N> 100)个请求以在java中指定URL? 我正在使用ExecutorService和CountDownLatch。

CountDownLatch latch = new CountDownLatch(DEFAULT_LATCH_COUNT);
    for (int i = 0; i < requestNumber; i++) {
        executor.submit(RequestFactory.getInstance().createRequester(latch, url));
    }
    latch.countDown();

但是为每个请求创建新的线程并不是一种好的做法,不是吗? 如果我必须每秒发送500个异步请求,我必须创建500个线程。 这是解决问题的正确方法还是有其他解决方案?

1 个答案:

答案 0 :(得分:1)

拥有500个线程是不好的做法,因为它会给线程之间的上下文切换带来不必要的开销,更不用说创建500个线程的初始化开销了。

请记住,并行运行的线程数量受可用处理器数量的限制(即Runtime.getRuntime().availableProcessors())。因此,如果您的计算机有8个可用的处理器,那么制作超过8个工作线程是没有意义的。

至于实际执行工作,这是一个cookie切割工人队列场景。在这里,您可以创建等于可用处理器数量的工作线程数,并让每个工作线程执行大量工作,直到完成所有工作(由AtomicInteger或类似的东西跟踪)