Skip to content

Commit

Permalink
修复加载PluggableEngine服务文件时因多线程并发产生的NPE问题
Browse files Browse the repository at this point in the history
  • Loading branch information
codefollower committed Oct 18, 2019
1 parent a6d81c3 commit 02de80e
Showing 1 changed file with 3 additions and 2 deletions.
Expand Up @@ -34,7 +34,7 @@ public abstract class PluggableEngineManager<T extends PluggableEngine> {

private final Class<T> pluggableEngineClass;
private final Map<String, T> pluggableEngines = new ConcurrentHashMap<>();
private boolean loaded = false;
private volatile boolean loaded = false;

protected PluggableEngineManager(Class<T> pluggableEngineClass) {
this.pluggableEngineClass = pluggableEngineClass;
Expand Down Expand Up @@ -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<Void> {
Expand Down

0 comments on commit 02de80e

Please sign in to comment.