From 3629a35a21be25fdeefc209dbd6f16f6531e5352 Mon Sep 17 00:00:00 2001 From: FUNKYE <364176773@qq.com> Date: Sat, 3 Feb 2024 02:03:34 +0800 Subject: [PATCH 1/3] Load the first time you use hessian serialization --- .../serialization/SerializerManager.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alipay/remoting/serialization/SerializerManager.java b/src/main/java/com/alipay/remoting/serialization/SerializerManager.java index 575df057..26998ba6 100644 --- a/src/main/java/com/alipay/remoting/serialization/SerializerManager.java +++ b/src/main/java/com/alipay/remoting/serialization/SerializerManager.java @@ -16,6 +16,8 @@ */ package com.alipay.remoting.serialization; +import java.util.concurrent.locks.ReentrantLock; + /** * Manage all serializers. * @@ -32,11 +34,19 @@ public class SerializerManager { public static final byte Hessian2 = 1; //public static final byte Json = 2; - static { - addSerializer(Hessian2, new HessianSerializer()); - } - + private static final ReentrantLock REENTRANT_LOCK = new ReentrantLock(); + public static Serializer getSerializer(int idx) { + if (serializers[idx] == null && idx == Hessian2) { + REENTRANT_LOCK.lock(); + try { + if (serializers[idx] == null) { + addSerializer(Hessian2, new HessianSerializer()); + } + } finally { + REENTRANT_LOCK.unlock(); + } + } return serializers[idx]; } From 9732bb5e2586860a4b0b14faf075b0d49d148dc8 Mon Sep 17 00:00:00 2001 From: jianbin Date: Mon, 5 Feb 2024 14:01:17 +0800 Subject: [PATCH 2/3] code format --- .../alipay/remoting/serialization/SerializerManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/alipay/remoting/serialization/SerializerManager.java b/src/main/java/com/alipay/remoting/serialization/SerializerManager.java index 26998ba6..0ca5a037 100644 --- a/src/main/java/com/alipay/remoting/serialization/SerializerManager.java +++ b/src/main/java/com/alipay/remoting/serialization/SerializerManager.java @@ -30,12 +30,12 @@ */ public class SerializerManager { - private static Serializer[] serializers = new Serializer[5]; - public static final byte Hessian2 = 1; + private static Serializer[] serializers = new Serializer[5]; + public static final byte Hessian2 = 1; //public static final byte Json = 2; private static final ReentrantLock REENTRANT_LOCK = new ReentrantLock(); - + public static Serializer getSerializer(int idx) { if (serializers[idx] == null && idx == Hessian2) { REENTRANT_LOCK.lock(); From 4b49100ad3d37d5cb822ee37ba4734899db65192 Mon Sep 17 00:00:00 2001 From: jianbin Date: Mon, 5 Feb 2024 14:22:49 +0800 Subject: [PATCH 3/3] opt --- .../remoting/serialization/SerializerManager.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alipay/remoting/serialization/SerializerManager.java b/src/main/java/com/alipay/remoting/serialization/SerializerManager.java index 0ca5a037..b30b36e3 100644 --- a/src/main/java/com/alipay/remoting/serialization/SerializerManager.java +++ b/src/main/java/com/alipay/remoting/serialization/SerializerManager.java @@ -37,17 +37,20 @@ public class SerializerManager { private static final ReentrantLock REENTRANT_LOCK = new ReentrantLock(); public static Serializer getSerializer(int idx) { - if (serializers[idx] == null && idx == Hessian2) { + Serializer currentSerializer = serializers[idx]; + if (currentSerializer == null && idx == Hessian2) { REENTRANT_LOCK.lock(); try { - if (serializers[idx] == null) { - addSerializer(Hessian2, new HessianSerializer()); + currentSerializer = serializers[idx]; + if (currentSerializer == null) { + currentSerializer = new HessianSerializer(); + addSerializer(Hessian2, currentSerializer); } } finally { REENTRANT_LOCK.unlock(); } } - return serializers[idx]; + return currentSerializer; } public static void addSerializer(int idx, Serializer serializer) {