JMM によると発生しないはずの奇妙な動作が見られます。クラスAを拡張するクラスBがあります。これは、コンストラクターでクラスBによってアクセスされるコンストラクターで初期化されるAの最終保護フィールドです。
しかし、ごくまれに、B でアクセスすると NPE が発生します。何かアイデアはありますか?
コードの一部:
class AsyncReplicationSourceGroup extends AbstractReplicationSourceGroup{
public AsyncReplicationSourceGroup(DynamicSourceGroupConfigHolder groupConfig){
super(groupConfig);
createReplicationChannels();
}
protected void createReplicationChannels(){
//...
specificLogger.finest("created channel"); // this is where the NPE is thrown from
//...
}
}
abstract class AbstractReplicationSourceGroup{
protected final Logger specificLogger;
public AbstractReplicationSourceGroup(DynamicSourceGroupConfigHolder groupConfigHolder){
specificLogger = Logger.getLogger(Constants.LOGGER_REPLICATION_GROUP + "." + _groupConfigHolder.getConfig().getName());
//...
}
}