Java,每秒发送多个get请求

标签 java multithreading concurrency

如何在java中每秒发送N(N > 100)个请求来指定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 个线程。 这是解决问题的正确方法还是还有其他解决方案?

最佳答案

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

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

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

关于Java,每秒发送多个get请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44912808/

相关文章:

multithreading - SearchView onQueryTextSubmit 在我按下一次时运行两次

java - 处理线程池并等待notifyALL()

java - Runtime.getRuntime().exec(命令);虚拟硬盘无法工作?

java - 如何确保长时间运行的 Java 线程永不消亡

python - 在最后不使用 time.sleep 的情况下在 Python 中进行多线程?

concurrency - Go并发和 channel 困惑

go - 限制运行的并发任务数

java - Java 和 HTTPS 中的导入私钥问题

java - spring配置文件中的动态依赖注入(inject)

java - GETUploader 在启动时添加文件