我有一个类ItemType,它具有引用子类实例的最终静态字段:
public static final ItemType DURATION = new BuiltInAtomicItemType(x);
static class BuiltInAtomicItemType extends ItemType {
public BuiltInAtomicItemType(X x) {
this.x = x;
}如果一个线程先加载超类,而另一个线程先加载子类,则会导致类加载死锁的可能性。
现在的问题是,这是一个公共API,我不能轻易地更改它。我想要消除类装入死锁的可能性,但我不想强制更改引用ItemType.DURATION或其他40多个类似字段的应用程序。
有没有办法在保留公共API的同时避免潜在的死锁?
发布于 2020-02-04 16:50:58
状态报告:似乎没有人知道这个问题的解决方案。在复杂的应用程序中设计类结构,以避免类加载和初始化期间出现死锁的所有可能性似乎非常困难。在不对公共API进行不兼容更改的情况下,修改现有应用程序以消除这种可能性在一般情况下似乎是不可能的。
https://stackoverflow.com/questions/50021182
复制相似问题