这个以pojo对象为参数的Java静态方法是线程安全的吗?

问题描述 投票:0回答:1

Java 类:

public class User {
   private Integer id;
   private String name;
}

我的实用类:

public class UtilityClass {

    public string static objToString(User user) {
         ObjectMapper mapper = new ObjectMapper();
         return mapper.writeValueAsString(user);
    }

}

上面的Utility类静态方法是线程安全的吗?

注意:用户对象始终在不同类的非静态私有方法中创建,然后调用静态方法来获取对象的 JSON 字符串。

我觉得它是线程安全的,因为它没有在类级别公开,并且静态方法不会更改其中的用户对象。

java multithreading jackson thread-safety jackson-databind
1个回答
0
投票

static
修饰符不保证线程安全。 然而,在您的示例中,该方法是线程安全的,因为正如您已经指出的,该方法不会读取或修改共享变量。

对于您的用例,如果 ObjectMapper 来自 jackson 库,则以下类也将是线程安全的,因为根据文档它是线程安全的:

Mapper 实例是完全线程安全的,前提是实例的所有配置都发生在任何读取或写入调用之前。

public class UtilityClass {
    static final ObjectMapper mapper = new ObjectMapper();

    public static String objToString(User user) {
         return mapper.writeValueAsString(user);
    }

}

如果要频繁调用该方法,则推荐使用后者,因为 ObjectMapper 的初始化会被缓存。

© www.soinside.com 2019 - 2024. All rights reserved.