【问题标题】:Thread pool to create set number of threads per second线程池每秒创建设定的线程数
【发布时间】:2019-07-29 23:08:30
【问题描述】:

我想使用线程池在不同的线程上每秒调用一个方法 10 次。有什么好的方法可以做到这一点?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 您是否需要这个,因为该方法可能需要超过 0.1 秒才能运行?否则单个线程可以重复“每秒调用一个方法 10 次”。
  • 你想要的是ScheduledThreadPoolExecutor吗?
  • 我会说下载一个 IDE 并开始编码。
  • 只是想要一个高水平的答案来看看什么,感谢所有给出合法答案的人

标签: java multithreading threadpool


【解决方案1】:

你需要使用Executor Framework来维护线程(你可以使用Fixed Thread Pool)并使用这些线程并行调用方法。

ExecutorService 执行器 = Executors.newFixedThreadPool(threadCount);

executor.submit(task);

【讨论】:

    【解决方案2】:

    使用一个线程在不同的线程上每秒调用一个方法 10 次 池

    定义该方法

    假设你要执行的方法是MyClass类的myMethod(),如下所示。

    class MyClass{
     static void myMethod(){
       // some task
     }
    }
    

    定义一个 Runnable 每秒执行该方法 10 次

    Runnable runnable = () ->{
      for(int i=0; i<10; i++){
       try{
         Thread.sleep(1000);
         MyClass.myMethod();
       }catch{}
      }
    };
    

    初始化线程池

    int threadCount = 10; //whatever number of threads you wish
    ExecutorService executor = Executors.newFixedThreadPool(threadCount);
    

    开始执行

    executor.execute(runnable);
    

    【讨论】:

      【解决方案3】:

      如果您只想要 10 个并行线程,请使用带有固定线程池的 ExecutorService

      https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int-

      如果您希望每秒完成某事,则需要考虑使用计划线程池。

      不清楚你真正需要什么。

      【讨论】:

      • 如何"每秒调用一个方法10次"
      • 好吧,不清楚操作员想要什么。他说他想从一个单独的线程池中调用该方法。每秒 10 个部分是模棱两可的。
      • “我想每秒调用一个方法 10 次”的哪一部分不明确?
      • 您自己在对问题的评论中提出的同样问题。是每秒 10 次并行吗?每个线程每秒10次吗?在这两种情况下,如果在单独的线程上每秒 10 次,则可以使用我的答案,假设每个方法调用都很短,每个线程只能休眠 1 秒。否则线程将调用该方法 10 次并在每次之间休眠。
      猜你喜欢
      • 2023-02-02
      • 2020-03-05
      • 2020-01-06
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2015-03-28
      • 1970-01-01
      相关资源
      最近更新 更多