java 中的 Executorservice 如何工作?

How Executorservice works in java?

我对传统的线程实现很熟悉,但对ExecutorService不太了解。我知道使用执行程序服务处理线程时非常方便。但我对它的实现有点困惑。

假设我有一个父 thread/main 线程和一个最大线程池大小为 10 的执行程序服务。现在我只想在大小小于 1000 的 jms 队列上执行某个任务。所以现在我可能会想到用两种方式来实现它。

案例 1:

class MyThreadClass inmplements Runnable {
      public static void main(String args[]){
           while(true){
               int checkQueueSize = jmsQueue.getSize();
               while(checkQueueSize<1000){
                   threadPoolTaskExecutor.execute(this);
                   ++checkQueueSize;
               }
           }
      }
      public void run(){
           jmsQueue.pushMessage("Hello Thread");
      }
}

案例2:

class MyThreadClass inmplements Runnable {
          public static void main(String args[]){
            threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
               threadPoolTaskExecutor.execute(this);
          }
          public void run(){
               while(true){
                   int checkQueueSize = jmsQueue.getSize();
                   while(checkQueueSize<1000){
                       jmsQueue.pushMessage("Hello Thread");
                       ++checkQueueSize;
                   }
               }
          }
    }

我的理解是情况 2 不会跨越多个线程。我是否正确?或者有其他方法可以完成任务吗?

"case 2 will not span more than one thread" 是的。这是对的。因为你只调用了一次execute

在第一种情况下,您可能会多次调用 execute。如果之前的任务未完成,将运行额外的线程。

请找到我的代码:-

    class MyThreadClass inmplements Runnable {
        public static void main(String args[]){
          threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
          for(int i=0;i<10;i++)
             threadPoolTaskExecutor.execute(this);
        }
        public void run(){
             while(true){
                 int checkQueueSize = jmsQueue.getSize();

                 if(checkQueueSize<=1000){
                     jmsQueue.pushMessage("Hello Thread");
                 }
             }   
        }
  }

修改:-

  1. 创建 10 个线程并通过传递 Runnable class 对象将它们分配给 运行 作业。
    1. 删除不必要的 while 循环作为执行无限迭代的外循环。