与Executors

时间:2017-08-01 08:13:41

标签: java spring soap executorservice

首先让我清楚议程:

  1. 我有1000个请求数据。
  2. 我将阅读所有1000个请求,我将向执行人提交1000个请求。
  3. 每个任务都会点击soap webservice并获得响应。
  4. 问题:

    1. 我有共享的应用程序上下文,对于所有线程都是一样的。
    2. 在bean.xml文件中,我有原型bean,我想用它来发出soap请求。
    3. 如果我使用共享应用程序上下文并获取proptype bean,那么它将导致共享应用程序上下文变量出现任何同步问题。
    4. 以下是示例代码:

      import java.io.ObjectInputStream.GetField;
      import java.util.concurrent.ExecutorService;
      import java.util.concurrent.Executors;
      class AppContext
      {
          ApplicationContext sharedContext = new ClassPathXmlApplicationContext("Beans.xml");
      
          public static ApplicationContext getAppContext()
          {
              if(sharedContext!=null)
              return sharedContext; //will this cause any isseu while accessing by multiple threads
          }
      
      }
      
      public class Testing {
      
      
      
      
      
          public static void main(String args[])
          {
      
              //here I tried to submit the task using ExecutorService and want to use the same application context
              //can I pass the prototypeBean in all the task with out synchronization issue?
              //because My appcontext is static so will it cause any issue while accessing my multiple threads
      
              ExecutorService service=Executors.newFixedThreadPool(10);
              service.submit(new LoopTaskA(AppContext.getAppContext().getBean("myProtoTypeBean")));
              service.submit(new LoopTaskA(AppContext.getAppContext().getBean("myProtoTypeBean")));
              service.submit(new LoopTaskA(AppContext.getAppContext().getBean("myProtoTypeBean")));
              service.submit(new LoopTaskA(AppContext.getAppContext().getBean("myProtoTypeBean")));
              service.shutdown();
      
      
      
          }
      }
      

1 个答案:

答案 0 :(得分:0)

这取决于您Runnables的行为。如果它们是无状态bean并且不与其他Runnable共享/修改相同的变量/引用,那么通常你是安全的。如果bean范围是 prototype getBean()将返回一个新实例。

小心池大小,确保设置合理的池大小(参见this)。此外,请确保设置Web服务请求的工作线程设置了适当的超时。