<!-- If you need to report a security issue please visit https://github.com/apache/dubbo/security/policy -->

ExtensionLoader cannot be resumed after interruption.

```
java.lang.InterruptedException
  at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1302)
  at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
  at org.apache.dubbo.common.utils.ClassLoaderResourceLoader.loadResources(ClassLoaderResourceLoader.java:55)
  at org.apache.dubbo.common.extension.ExtensionLoader.loadDirectory(ExtensionLoader.java:1005)
  at org.apache.dubbo.common.extension.ExtensionLoader.loadDirectory(ExtensionLoader.java:943)
  at org.apache.dubbo.common.extension.ExtensionLoader.loadExtensionClasses(ExtensionLoader.java:931)
  at org.apache.dubbo.common.extension.ExtensionLoader.getExtensionClasses(ExtensionLoader.java:913)
  at org.apache.dubbo.common.extension.ExtensionLoader.createExtension(ExtensionLoader.java:752)
  at org.apache.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:548)
  at org.apache.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:523)
  at org.apache.dubbo.rpc.protocol.injvm.InjvmInvoker.<init>(InjvmInvoker.java:74)
```
throw new IllegalStateException("Extension name " +
                    name + " already exists (Extension " + type + ")!");
            }
            cachedNames.put(clazz, name);
            cachedClasses.get().put(name, clazz);
        } else {
            if (cachedAdaptiveClass != null) {
                throw new IllegalStateException("Adaptive Extension already exists (Extension " + type + ")!");
            }
            cachedAdaptiveClass = clazz;
        }
    }
    /**
     * Replace the existing extension via API
     *
     * @param name  extension name
     * @param clazz extension class
     * @throws IllegalStateException when extension to be placed doesn't exist
     * @deprecated not recommended any longer, and use only when test
     */
    @Deprecated
    public void replaceExtension(String name, Class<?> clazz) {
        checkDestroyed();
        getExtensionClasses(); 
        if (!type.isAssignableFrom(clazz)) {
            throw new IllegalStateException("Input type " +
                clazz + " doesn't implement Extension " + type);
        }
        if (clazz.isInterface()) {
            throw new IllegalStateException("Input type " +