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 字符串。
我觉得它是线程安全的,因为它没有在类级别公开,并且静态方法不会更改其中的用户对象。
static
修饰符不保证线程安全。
然而,在您的示例中,该方法是线程安全的,因为正如您已经指出的,该方法不会读取或修改共享变量。
对于您的用例,如果 ObjectMapper 来自 jackson 库,则以下类也将是线程安全的,因为根据文档它是线程安全的:
Mapper 实例是完全线程安全的,前提是实例的所有配置都发生在任何读取或写入调用之前。
public class UtilityClass {
static final ObjectMapper mapper = new ObjectMapper();
public static String objToString(User user) {
return mapper.writeValueAsString(user);
}
}
如果要频繁调用该方法,则推荐使用后者,因为 ObjectMapper 的初始化会被缓存。