【发布时间】:2021-10-01 06:51:40
【问题描述】:
我有一个 util 类,带有一个私有构造函数,并且所有方法都是静态的。原因是,没有一个方法共享任何对象,因为该类不存储任何状态。但是我想知道如果这些静态方法并行调用,是否会导致任何请求阻塞?静态变量存储在共享内存位置这一事实是否会影响这一点? 对于理解底层执行机制的任何帮助将不胜感激。
下面是我正在谈论的课程。
public final class PersonUtil {
private static IPerson person;
private PersonUtil() {
}
public static PersonOutput generatePerson(final PersonInput personInput) {
if (isParamProvided()) {
person = new MyPerson();
} else {
person = new LegacyPerson();
}
return person.create(personInput);
}
public static void assignState(final String guid) {
//call AssignState API for given guid
}
public static String getGuidForId(final String id) {
//call GetGuid API for the given ID
}
public static String getPersonNameByGuid(final String guid) {
// call DescribePerson API
}
}
【问题讨论】:
-
这些方法是否修改静态变量?如何确保线程安全?
-
我用我的班级更新了这个问题,它们都是不相关的方法,它们不会修改任何静态变量。他们都使用给定的输入参数进行自己的 API 调用
-
在您的示例中,这将取决于这些对这些 API 的请求是如何实现的——它们是否使用某种共享套接字?会话处理是如何实现的?等等。但基本上,
static在这方面没有任何改变,同样的考虑也适用于实例方法。 -
给出的例子根本不应该是静态的,或者至少不应该有一个静态字段
person。 -
你真的觉得发
public static void methodName(final String guid) { //call MethodName API for given guid }这样的代码有用吗?我们应该对评论的线程安全性或您的问题中未包含的代码进行推理吗?