有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java非同步静态方法与线程安全

假设我有下面的方法,这个方法是线程安全的吗

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

即:两个单独的线程是否可以同时运行上述方法来传递str的不同实例(比如两个完全不同的字符串对象)并相互冲突

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


共 (4) 个答案

  1. # 1 楼答案

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

    尽管如此,我们不知道someNonStatimethodProcessingNobj()是否是静态的,更不用说它的名字暗示它是非静态的,但它不会针对任何实例运行

  2. # 2 楼答案

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

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

    如果方法体(以及任何被调用的方法)没有对任何共享状态做任何事情,您就不必担心。如果确实如此,你需要更仔细地思考

  3. # 3 楼答案

    没有

    但是使用方法某些非静态方法处理nobj的答案可能会有所不同

  4. # 4 楼答案

    下面是一个类似问题的答案,我在其中添加了一些示例,可能会让您明白这一点: difference between synchronizing a static method and a non static method

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