Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与执行者共享应用程序上下文_Java_Spring_Soap_Executorservice - Fatal编程技术网

Java 与执行者共享应用程序上下文

Java 与执行者共享应用程序上下文,java,spring,soap,executorservice,Java,Spring,Soap,Executorservice,让我先澄清一下议程: 我有1000个请求数据 我将阅读所有1000份申请,并将1000份申请提交给执行人 每个任务都将访问soap Web服务并获得响应 问题: 我有一个共享的应用程序上下文,它对所有线程都是相同的 在bean.xml文件中,我有一个原型bean,我想用它来发出soap请求 如果我使用共享应用程序上下文并获得proptype bean,那么它将导致共享应用程序上下文变量出现任何synchrinizattion问题 下面是示例代码: import java.io.ObjectInp

让我先澄清一下议程:

  • 我有1000个请求数据
  • 我将阅读所有1000份申请,并将1000份申请提交给执行人
  • 每个任务都将访问soap Web服务并获得响应
  • 问题:

  • 我有一个共享的应用程序上下文,它对所有线程都是相同的
  • 在bean.xml文件中,我有一个原型bean,我想用它来发出soap请求
  • 如果我使用共享应用程序上下文并获得proptype bean,那么它将导致共享应用程序上下文变量出现任何synchrinizattion问题
  • 下面是示例代码:

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

    这取决于您的
    可运行程序的功能。如果它们是无状态bean,并且不与其他
    Runnable
    s共享/修改相同的变量/引用,那么通常您是安全的<如果bean作用域是prototype,则code>getBean()
    将返回一个新实例


    注意池大小,确保设置了合理的池大小(请参阅)。另外,确保发出web服务请求的工作线程设置了适当的超时。

    这取决于
    可运行程序的功能。如果它们是无状态bean,并且不与其他
    Runnable
    s共享/修改相同的变量/引用,那么通常您是安全的<如果bean作用域是prototype,则code>getBean()
    将返回一个新实例


    注意池大小,确保设置了合理的池大小(请参阅)。另外,确保发出web服务请求的工作线程设置了适当的超时。

    在我的Runnable中,我将使用原型bean来访问web服务。我的所有任务都是从同一个应用程序上下文中获取原型bean,那么我的同一个应用程序上下文是否会导致任何问题?请帮助代码将与我上面提到的相同。通过不同线程从同一应用程序上下文获取辅助bean没有问题。但是如果您的工作bean共享/修改相同的变量/引用,那么就有问题了。共享相同的变量是什么意思,我认为您是指通过相同的应用程序上下文共享单例bean?所以,如果它的原型bean由应用程序上下文提供服务,那么我没有任何问题,您需要阅读关于线程安全的内容。例如,假设您仅将全局计数器保留为
    int
    变量,并在处理每个请求(来自工作线程)后更新它,那么您的代码不是线程安全的-您有一个争用条件,所以你需要一个合适的锁或者
    AtomicInteger
    来更新这个计数器。我的所有任务都是从同一个应用程序上下文中获取原型bean,那么我的同一个应用程序上下文是否会导致任何问题?请帮助代码将与我上面提到的相同。通过不同线程从同一应用程序上下文获取辅助bean没有问题。但是如果您的工作bean共享/修改相同的变量/引用,那么就有问题了。共享相同的变量是什么意思,我认为您是指通过相同的应用程序上下文共享单例bean?所以,如果它的原型bean由应用程序上下文提供服务,那么我没有任何问题,您需要阅读关于线程安全的内容。例如,假设您仅将全局计数器保留为
    int
    变量,并在处理每个请求(来自工作线程)后更新它,那么您的代码不是线程安全的-您有一个争用条件,因此您需要一个适当的锁定或
    AtomicInteger
    来更新此计数器。