2013-03-07 106 views
0

考虑此“模式”我在我继承一个应用程序中遇到:静态方法调用单

public class BusinessUtil{ 
    public static void doBusiness(IService myService, String arg1, int arg2){ 
     //something something 
     myService.doStuff(arg1, arg2); 
    } 
} 

为myService豆是springBean(=单)。它实际上是一个CXF的客户端(=产生的web服务客户端)

这是web应用,所以静态 doBusiness()方法是从不同并发线程调用。 此方法是线程安全的吗?

之前你问:我知道这是一个奇怪的'模式'。我知道 doBusiness()方法是相当多余的,因为我们可以直接调用 myService.doStuff()而不是将它传递到调用它的静态方法中。正如我所说,我继承了一个应用程序,这个“模式”遍布全球。我不知道为什么。 该应用程序有(有时)一些奇怪的行为,我试图找出问题的根源。

回答

2

doBusiness()中没有任何内容导致线程不安全。是否线程安全取决于线程安全性myService.doStuff(arg1, arg2);

+0

谢谢!这种方法还有其他的考虑吗? 我的意思是,你什么时候会使用这种方法:'BusinessUtil.doBusiness(service,arg1,arg2)'而不是更直观的'service.doStuff(arg1,arg2)'? 我问,因为我在我的问题中描述的'模式'对我来说没有多大意义。 – thomash 2013-03-07 08:22:37

+0

好吧,说实话,这种“模式”对我来说似乎没有任何意义(如果它实际上在做你写的东西)。然而,在开发领域工作多年后,我看到很多人实际上在做很多没有意义的“抽象”或“模式”:P – 2013-03-08 03:28:47

0

线程安全与否取决于myService.doStuff(arg1,arg2);既然是cxf-client这篇文章Are CXF client proxies thread safe? 可能有用

+0

谢谢。我见过这篇文章。这被认为是线程安全的。 – thomash 2013-03-07 08:29:31