### Environment

* Dubbo version: 3.0
集成构建时，执行GenericServiceTest测试方法下面的语句时，
```
        // Test generic service without interface class locally
        result = genericServiceWithoutInterfaceRef.$invoke("sayHello", new String[]{"java.lang.String"}, new Object[]{"generic"});
```
ReferenceConfig的checkInvokerAvailable方法有时会抛异常，导致集成构建失败，异常信息如下：
java.lang.IllegalStateException: Failed to check the status of the service org.apache.dubbo.config.spring.api.LocalMissClass. No provider available for the service org.apache.dubbo.config.spring.api.LocalMissClass from the url dubbo://10.1.0.184/org.apache.dubbo.config.spring.api.LocalMissClass?application=dubbo-generic-consumer&dubbo=2.0.2&file.cache=false&generic=true&init=false&interface=org.apache.dubbo.config.spring.api.LocalMissClass&metadata-type=remote&pid=9816&register.ip=10.1.0.184&release=3.0.3-SNAPSHOT&side=consumer&sticky=false&timestamp=1630699707283 to the consumer 10.1.0.184 use dubbo version 3.0.3-SNAPSHOT
	at org.apache.dubbo.config.spring.schema.GenericServiceTest.testGeneric(GenericServiceTest.java:97)

* 更新2021-09-10：
执行ServiceDiscoveryRegistryDirectory的refreshInvoker方法刷新urlInvokerMap的线程和执行ReferenceConfig的init方法的线程不是一个线程，刷新的线程名是main-EventThread，执行init的线程是main线程。而refreshInvoker方法调用toInvokers时会先把当前的this.urlInvokerMap里面的entry全清，在将newUrlInvokerMap重新赋值给this.urlInvokerMap前，如果恰好遇到执行init的main线程在执行isAvailable判断就会因为this.urlInvokerMap没有entry而返回false。
重现方法：在ServiceDiscoveryRegistryDirectory的toInvokers方法调用返回的下一行代码设置断点，在isAvailable的Map<String, Invoker<T>> localUrlInvokerMap = urlInvokerMap处设置断点，执行到toInvokers返回时暂停main-EventThread线程执行，切换到停留在isAvailable的main线程继续执行，就能重现这个issue。

PS：
采用genericServiceWithoutInterface方式的JavaConfigReferenceBeanTest的testGenericServiceAnnotationBean方法的165行有时也抛异常
* 更新2021-09-10：这个RpcException异常可能是上一个测试方法执行AfterEach释放了全局资源干扰了仍在运行的dubbo后台线程导致的，已另开issue
```
        Object sayHelloResult = genericServiceWithoutInterface.$invoke("sayHello", new String[]{"java.lang.String"}, new Object[]{"Dubbo"});
```
只是抛的异常是RpcException: Directory already destroyed
```
2021-09-03T18:39:04.9792146Z org.apache.dubbo.rpc.RpcException: Directory already destroyed .url: zookeeper://127.0.0.1:2181/org.apache.dubbo.registry.RegistryService?application=consumer-app&dubbo=2.0.2&file.cache=false&pid=8884&release=3.0.3-SNAPSHOT&timestamp=1630694303313
2021-09-03T18:39:04.9797067Z 	at org.apache.dubbo.config.spring.reference.javaconfig.JavaConfigReferenceBeanTest.testGenericServiceAnnotationBean(JavaConfigReferenceBeanTest.java:165)
```
" in notified url: " + providerUrl + " from registry " + getUrl().getAddress() +
                        " to consumer " + NetUtils.getLocalHost() + ", supported protocol: " +
                    getUrl().getOrDefaultFrameworkModel().getExtensionLoader(Protocol.class).getSupportedExtensions()));
                continue;
            }
            URL url = mergeUrl(providerUrl);
            
            Map<URL, Invoker<T>> localUrlInvokerMap = this.urlInvokerMap; 
            Invoker<T> invoker = localUrlInvokerMap == null ? null : localUrlInvokerMap.remove(url);
            if (invoker == null) { 
                try {
                    boolean enabled = true;
                    if (url.hasParameter(DISABLED_KEY)) {
                        enabled = !url.getParameter(DISABLED_KEY, false);
                    } else {
                        enabled = url.getParameter(ENABLED_KEY, true);
                    }
                    if (enabled) {
                        invoker = protocol.refer(serviceType, url);
                    }
                } catch (Throwable t) {
                    logger.error("Failed to refer invoker for interface:" + serviceType + ",url:(" + url + ")" + t.getMessage(), t);
                }
                if (invoker != null) { 
                    newUrlInvokerMap.put(url, invoker);
                }
            } else {
                newUrlInvokerMap.put(url, invoker);
            }
        }