java spring无尽的并发工作

标签 java spring multithreading concurrency

我正在开发必须发送http请求的应用程序。应用程序必须在 1 天内为 100 000 个用户发送 5 个请求。我使用 spring mvc,我想使用线程来执行此 http 请求

  for(int j = 0; j < 100; j++){

        for(int i = 0; i < 5000; i++){
            OrderActionThread thread = new OrderActionThread();
            thread.start();
        }

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

OrderActionThread 发出 http 请求

我不知道我应该使用什么来完成这个任务...我已经阅读了有关 Spring 集成的内容,但我不确定我应该使用它。我该如何决定这个任务?

最佳答案

不要直接使用Thread,上面的循环将创建 5 000 000 个线程,您很可能会耗尽内存,线程池最适合如此大量的线程。

因为你想每天安排它,所以我建议使用Executors.newScheduledThreadPool:

final ScheduledExecutorService pool = Executors.newScheduledThreadPool(10);
for(int j = 0; j < 100; j++){
    for(int i = 0; i < 5000; i++){
        pool.scheduleAtFixedRate(new OrderActionThread(), 0, 1, TimeUnit.DAYS);
     }
 }

上述池将使用 10 线程(您可以增加该数量),并将安排所有 5 000 000 个任务每 24 小时重复一次(1 TimeUnit .DAYS)。

关于java spring无尽的并发工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37767553/

相关文章:

Java:太高的值(value)处理 - 最佳实践?

java - CrudRepository 上的默认排序?

java - 删除未保存的对象不会引发异常

java - Couchbase:从静态代码块中初始化需要更长的时间

ruby - Ruby 中的并行性

c++ - C++成员函数声明中volatile关键字的位置

java - 输入对话框[所需信息]

java - 将文件读入字符串的最简单方法是什么?

java - 我们可以将 Spring Cloud Contract 请求/响应属性设置为可选吗?

java - 如何从java中的JTree中删除每个节点前面的文件夹符号