From 6b127c19a0dc141f1023515230c33f873e422f80 Mon Sep 17 00:00:00 2001 From: funkye <364176773@qq.com> Date: Tue, 20 Feb 2024 14:44:58 +0800 Subject: [PATCH] Load the first time you use hessian serialization (#339) * Load the first time you use hessian serialization --- .../serialization/SerializerManager.java | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 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..b30b36e3 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. * @@ -28,16 +30,27 @@ */ 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; - static { - addSerializer(Hessian2, new HessianSerializer()); - } + private static final ReentrantLock REENTRANT_LOCK = new ReentrantLock(); public static Serializer getSerializer(int idx) { - return serializers[idx]; + Serializer currentSerializer = serializers[idx]; + if (currentSerializer == null && idx == Hessian2) { + REENTRANT_LOCK.lock(); + try { + currentSerializer = serializers[idx]; + if (currentSerializer == null) { + currentSerializer = new HessianSerializer(); + addSerializer(Hessian2, currentSerializer); + } + } finally { + REENTRANT_LOCK.unlock(); + } + } + return currentSerializer; } public static void addSerializer(int idx, Serializer serializer) {