From 6bd65ed1a679db7aaa09c5286488c26f02e13f03 Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Sat, 26 Jun 2021 10:04:06 +0800 Subject: [PATCH] =?UTF-8?q?perf[event]:=20=E8=B0=83=E6=95=B4EventBus?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zfoo/event/manager/EventBus.java | 34 ++--------------- .../event/manager/EventThreadFactory.java | 37 +++++++++++++++++++ 2 files changed, 40 insertions(+), 31 deletions(-) create mode 100644 event/src/main/java/com/zfoo/event/manager/EventThreadFactory.java diff --git a/event/src/main/java/com/zfoo/event/manager/EventBus.java b/event/src/main/java/com/zfoo/event/manager/EventBus.java index 78becf67..2d209c3a 100644 --- a/event/src/main/java/com/zfoo/event/manager/EventBus.java +++ b/event/src/main/java/com/zfoo/event/manager/EventBus.java @@ -17,7 +17,6 @@ import com.zfoo.event.model.event.IEvent; import com.zfoo.event.model.vo.IEventReceiver; import com.zfoo.protocol.collection.CollectionUtils; import com.zfoo.util.math.RandomUtils; -import io.netty.util.concurrent.FastThreadLocalThread; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,8 +27,6 @@ import java.util.Map; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.atomic.AtomicInteger; /** * @author jaysunxiao @@ -42,43 +39,18 @@ public abstract class EventBus { // 线程池的大小 private static final int EXECUTORS_SIZE = Runtime.getRuntime().availableProcessors() * 2; - private static final ExecutorService[] executors; + private static final ExecutorService[] executors = new ExecutorService[EXECUTORS_SIZE]; - private static final Map, List> receiverMap; + private static final Map, List> receiverMap = new HashMap<>(); static { - receiverMap = new HashMap<>(); - executors = new ExecutorService[EXECUTORS_SIZE]; - for (int i = 0; i < executors.length; i++) { - var namedThreadFactory = new EventThreadFactory(); + var namedThreadFactory = new EventThreadFactory(i + 1); executors[i] = Executors.newSingleThreadExecutor(namedThreadFactory); } } - private static class EventThreadFactory implements ThreadFactory { - private static final AtomicInteger poolNumber = new AtomicInteger(1); - private final ThreadGroup group; - private final AtomicInteger threadNumber = new AtomicInteger(1); - private final String namePrefix; - - EventThreadFactory() { - var s = System.getSecurityManager(); - group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); - namePrefix = "event-p" + poolNumber.getAndIncrement() + "-t"; - } - - @Override - public Thread newThread(Runnable runnable) { - var t = new FastThreadLocalThread(group, runnable, namePrefix + threadNumber.getAndIncrement(), 0); - t.setDaemon(false); - t.setPriority(Thread.NORM_PRIORITY); - t.setUncaughtExceptionHandler((thread, e) -> logger.error(thread.toString(), e)); - return t; - } - } - /** * 同步抛出一个事件,会在当前线程中运行 * diff --git a/event/src/main/java/com/zfoo/event/manager/EventThreadFactory.java b/event/src/main/java/com/zfoo/event/manager/EventThreadFactory.java new file mode 100644 index 00000000..807aab72 --- /dev/null +++ b/event/src/main/java/com/zfoo/event/manager/EventThreadFactory.java @@ -0,0 +1,37 @@ +package com.zfoo.event.manager; + +import io.netty.util.concurrent.FastThreadLocalThread; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class EventThreadFactory implements ThreadFactory { + + private static final Logger logger = LoggerFactory.getLogger(EventThreadFactory.class); + + private final ThreadGroup group; + private final AtomicInteger threadNumber = new AtomicInteger(1); + private final String namePrefix; + + public EventThreadFactory(int poolNumber) { + var s = System.getSecurityManager(); + group = (s != null) ? s.getThreadGroup() : Thread.currentThread().getThreadGroup(); + namePrefix = "event-p" + poolNumber + "-t"; + } + + @Override + public Thread newThread(Runnable runnable) { + var t = new FastThreadLocalThread(group, runnable, namePrefix + threadNumber.getAndIncrement(), 0); + t.setDaemon(false); + t.setPriority(Thread.NORM_PRIORITY); + t.setUncaughtExceptionHandler((thread, e) -> logger.error(thread.toString(), e)); + return t; + } + +}