This is an automated email from the ASF dual-hosted git repository.
albumenj pushed a commit to branch 3.3
in repository https://gitbox.apache.org/repos/asf/dubbo.git
The following commit(s) were added to refs/heads/3.3 by this push:
new cedc58316d Optimized RpcMessageHandler to reduce thread pool usage
(#15163)
cedc58316d is described below
commit cedc58316ddce533644aa627e5233711907c2e62
Author: zrlw <[email protected]>
AuthorDate: Fri Feb 21 10:31:49 2025 +0800
Optimized RpcMessageHandler to reduce thread pool usage (#15163)
---
.../remoting/transport/netty4/RpcMessageHandler.java | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git
a/dubbo-remoting/dubbo-remoting-netty4/src/test/java/org/apache/dubbo/remoting/transport/netty4/RpcMessageHandler.java
b/dubbo-remoting/dubbo-remoting-netty4/src/test/java/org/apache/dubbo/remoting/transport/netty4/RpcMessageHandler.java
index 89099f8d6b..5300ccfac2 100755
---
a/dubbo-remoting/dubbo-remoting-netty4/src/test/java/org/apache/dubbo/remoting/transport/netty4/RpcMessageHandler.java
+++
b/dubbo-remoting/dubbo-remoting-netty4/src/test/java/org/apache/dubbo/remoting/transport/netty4/RpcMessageHandler.java
@@ -18,26 +18,32 @@ package org.apache.dubbo.remoting.transport.netty4;
import org.apache.dubbo.common.bytecode.NoSuchMethodException;
import org.apache.dubbo.common.bytecode.Wrapper;
+import org.apache.dubbo.common.utils.ConcurrentHashMapUtils;
import org.apache.dubbo.remoting.RemotingException;
import org.apache.dubbo.remoting.exchange.ExchangeChannel;
import org.apache.dubbo.remoting.exchange.support.Replier;
import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
/**
* RpcMessageHandler.
*/
public class RpcMessageHandler implements Replier<RpcMessage> {
+ private static final ConcurrentMap<String, Object> IMPLEMENT_MAP = new
ConcurrentHashMap<>();
private static final ServiceProvider DEFAULT_PROVIDER = new
ServiceProvider() {
public Object getImplementation(String service) {
String impl = service + "Impl";
- try {
- Class<?> cl =
Thread.currentThread().getContextClassLoader().loadClass(impl);
- return cl.getDeclaredConstructor().newInstance();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
+ return ConcurrentHashMapUtils.computeIfAbsent(IMPLEMENT_MAP, impl,
(s) -> {
+ try {
+ Class<?> cl =
Thread.currentThread().getContextClassLoader().loadClass(s);
+ return cl.getDeclaredConstructor().newInstance();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ });
}
};
private ServiceProvider mProvider;