非同步静态方法&线程安全

时间:2011-06-28 13:41:34

标签: java synchronization thread-safety

假设我有以下方法,方法线程安全吗?

public static void forwardProcessingPerStudy(String str)
{
        someNonStaticMethodProcessingOnObj(str);
}

I.e:两个独立的线程可以同时运行上面的方法传递不同的str实例(比如两个完全不同的字符串对象)并相互冲突吗?

对于线程使用安全的方法,我是否必须使其成为同步方法?

4 个答案:

答案 0 :(得分:4)

是的,两个不同的线程可以同时运行该方法,使用相同的字符串引用或不同的字符串引用。

至于是否需要同步,这完全取决于someNonStaticMethodProcessingOnObj的作用。该名称暗示它正在调用非静态方法,但鉴于您没有指定要调用它的实例,这似乎不太可能。

如果方法的主体(以及任何被调用的方法)对任何共享状态都没有做任何事情,那么您不必担心。如果是这样,你需要更仔细地思考。

答案 1 :(得分:0)

没有

但方法 someNonStaticMethodProcessingOnObj 的答案可能不同。

答案 2 :(得分:0)

显示的方法是线程安全的,因为它不访问任何对象的任何有状态信息。

话虽如此,我们不知道someNonStaticMethdoProcessingOnObj()是否存在,更不用说名称暗示它是非静态的,但它不是针对任何实例运行的。

答案 3 :(得分:0)

以下是对类似问题的回答,其中我添加了一些可能为您清楚说明的示例: difference between synchronizing a static method and a non static method

事情是,同步添加到外部方法可能没有帮助,因为它在关联的Class对象上同步。内部方法可能需要在其他方面同步。所以需要一些关心。