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



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

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

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

为了使该方法对线程使用是安全的,我必须使它成为一个同步的方法吗?

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

至于是否需要同步,这完全取决于someNonStaticMethodProcessingOnObj的作用。这个名称意味着它正在调用一个非静态方法,但考虑到您没有指定调用它的实例,这似乎不太可能。

如果方法的主体(以及调用的任何方法)没有对任何共享状态执行任何操作,则无需担心。如果是这样,你需要更仔细地思考。

是。

没有。

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

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

话虽如此,我们不知道someNonStaticMethdoProcessingOnObj()是不是,更不用说这个名称意味着它是非静态的,但它不会针对任何实例运行。

下面是一个类似问题的答案,我在其中添加了一些示例,可能会让您明白这一点:同步静态方法和非静态方法之间的区别

问题是,将synchronized添加到外部方法可能没有帮助,因为这会在关联的Class对象上进行同步。内部方法可能需要在其他方法上同步。因此需要一些小心。

最新更新