线程安全,静态方法和一些奇怪的代码

时间:2018-07-13 14:03:12

标签: java static thread-safety singleton

我最近偶然发现了一段类似于下面的代码。此代码确实很臭。看起来像单例,但不是因为没有私有构造函数。我知道这肯定会给线程安全问题带来足够大的负担。特殊给出的类实例。有人可以指出此代码的线程安全问题吗?

public class AClass extends AnotherClass {

  public static final AClass instance = new AClass();

  public static SomeObject doSomethingThatCallsAService(Params params) {
       return methodThatCallsService(params, instance);
  }

  public static SomeObject methodThatCallsService(Params params, AClass instance) {
      -----call service here ---------
      instance.doSomethingElse();
  }

  private void doSomethingElse() {
      --- do some trivial work -----
  }
}

1 个答案:

答案 0 :(得分:3)

鉴于该对象不携带状态,因此与线程安全无关,无论在单例对象上调用方法或对单例对象进行引用的线程数量如何。

该类中的所有方法,包括静态方法,都不使用任何共享数据。因此,无论他们是在单例对象上调用方法还是在实例之间传递实例,都无需访问任何要同步的东西。

正如代码所示,唯一可能需要同步的数据是import okhttp3.Headers; import okhttp3.OkHttpClient; import okhttp3.RequestBody; import okhttp3.Response; 的参数中的params,并且只有此方法修改了数据并且线程持有对同一methodThatCallsService对象的引用。

但是就此类而言,即使单例实现很容易受到攻击,它也是线程安全的。