首页 文章

Executorservice如何在java中运行?

提问于
浏览
0

我熟悉传统的线程实现,但对Executorservice不太确定 . 我知道使用执行程序服务处理线程非常方便 . 但我对它的实施并不感到困惑 .

假设我有一个父线程/主线程和一个具有最大线程池大小为10的 Actuator 服务 . 现在我想在jms队列上执行某个任务,只要它的大小小于1000.所以现在我可能会想到以两种方式实现这一点 .

case 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");
      }
}

case 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;
                   }
               }
          }
    }

我的理解是 case 2 不会跨越多个线程 . 我是否正确?或者还有其他方法来执行任务吗?

2 回答

  • 0

    "case 2 will not span more than one thread"是的 . 这是对的 . 因为你只召唤一次 execute .

    在第一种情况下,您可以多次调用 execute . 如果以前的任务没有完成,额外的线程将被破坏 .

  • 0

    请找我的代码: -

    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");
                     }
                 }   
            }
      }
    

    修改:-

    • 创建10个线程,并通过传递Runnable类对象将它们分配给运行作业 .

    • 删除不必要的while循环,因为外循环执行infite itaration .

相关问题