假设我有以下方法,方法线程安全吗?
public static void forwardProcessingPerStudy(String str)
{
someNonStaticMethodProcessingOnObj(str);
}
I.e:两个独立的线程可以同时运行上面的方法传递不同的str实例(比如两个完全不同的字符串对象)并相互冲突吗?
对于线程使用安全的方法,我是否必须使其成为同步方法?
答案 0 :(得分:4)
是的,两个不同的线程可以同时运行该方法,使用相同的字符串引用或不同的字符串引用。
至于是否需要同步,这完全取决于someNonStaticMethodProcessingOnObj
的作用。该名称暗示它正在调用非静态方法,但鉴于您没有指定要调用它的实例,这似乎不太可能。
如果方法的主体(以及任何被调用的方法)对任何共享状态都没有做任何事情,那么您不必担心。如果是这样,你需要更仔细地思考。
答案 1 :(得分:0)
是
没有
但方法 someNonStaticMethodProcessingOnObj 的答案可能不同。
答案 2 :(得分:0)
显示的方法是线程安全的,因为它不访问任何对象的任何有状态信息。
话虽如此,我们不知道someNonStaticMethdoProcessingOnObj()是否存在,更不用说名称暗示它是非静态的,但它不是针对任何实例运行的。
答案 3 :(得分:0)
以下是对类似问题的回答,其中我添加了一些可能为您清楚说明的示例: difference between synchronizing a static method and a non static method
事情是,同步添加到外部方法可能没有帮助,因为它在关联的Class对象上同步。内部方法可能需要在其他方面同步。所以需要一些关心。