diff --git a/lealone-common/src/main/java/org/lealone/db/PluggableEngineManager.java b/lealone-common/src/main/java/org/lealone/db/PluggableEngineManager.java index 21079363a..e7fe02481 100644 --- a/lealone-common/src/main/java/org/lealone/db/PluggableEngineManager.java +++ b/lealone-common/src/main/java/org/lealone/db/PluggableEngineManager.java @@ -34,7 +34,7 @@ public abstract class PluggableEngineManager { private final Class pluggableEngineClass; private final Map pluggableEngines = new ConcurrentHashMap<>(); - private boolean loaded = false; + private volatile boolean loaded = false; protected PluggableEngineManager(Class pluggableEngineClass) { this.pluggableEngineClass = pluggableEngineClass; @@ -73,8 +73,9 @@ public void deregisterEngine(T pluggableEngine, String... alias) { private synchronized void loadPluggableEngines() { if (loaded) return; - loaded = true; AccessController.doPrivileged(new PluggableEngineService()); + // 注意在load完之后再设为true,否则其他线程可能会因为不用等待load完成从而得到一个NPE + loaded = true; } private class PluggableEngineService implements PrivilegedAction {