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;

Reply via email to