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



我最近偶然发现了一段类似于下面的代码。这段代码确实很臭。看起来像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 -----
}
}

假设对象不携带状态,那么不管在singleton对象上调用方法或引用singleton对象的线程数量如何,都不需要考虑线程安全。

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

正如代码所示,唯一可能需要同步的数据是methodThatCallsService的参数中的params,只有当此方法修改数据并且多个线程持有对同一Params对象的引用时。

但是就这个类而言,它是线程安全的,即使单例实现是易受攻击的。

最新更新