From c5bdf339674f5762125b25104d7269b1b50e4d91 Mon Sep 17 00:00:00 2001
From: Administrator <hbal>
Date: 星期五, 14 四月 2023 08:38:00 +0800
Subject: [PATCH]  连接池

---
 JavaSource/com/mandi/fendan/util/ThreadPoolUtil.java |  121 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 121 insertions(+), 0 deletions(-)

diff --git a/JavaSource/com/mandi/fendan/util/ThreadPoolUtil.java b/JavaSource/com/mandi/fendan/util/ThreadPoolUtil.java
new file mode 100644
index 0000000..43f01ff
--- /dev/null
+++ b/JavaSource/com/mandi/fendan/util/ThreadPoolUtil.java
@@ -0,0 +1,121 @@
+package com.mandi.fendan.util;
+
+import javax.validation.constraints.NotNull;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * 绾跨▼姹犵殑宸ュ叿绫�
+ * 鐢ㄤ簬杩涜绾跨▼鐨勭鐞嗭紝闃叉閲嶅鍒涘缓銆佹潃姝荤嚎绋嬨��
+ *
+
+ * 澶氱嚎绋嬭繍琛屾湡闂达紝濡傛灉绯荤粺涓嶆柇鐨勫垱寤恒�佹潃姝绘柊绾跨▼锛�
+ * 浼氫骇鐢熻繃搴︽秷鑰楃郴缁熻祫婧愶紝浠ュ強杩囧害鍒囨崲绾跨▼鐨勯棶棰橈紝鐢氳嚦鍙兘瀵艰嚧绯荤粺璧勬簮鐨勫穿婧冦��
+ * 鍥犳闇�瑕佺嚎绋嬫睜锛屽绾跨▼杩涜绠$悊銆�
+ */
+public class ThreadPoolUtil {
+
+    private String TAG = getClass().getName();
+    private static volatile ThreadPoolUtil mInstance;
+    //鏍稿績绾跨▼姹犵殑鏁伴噺锛屽悓鏃惰兘澶熸墽琛岀殑绾跨▼鏁伴噺
+    private int corePoolSize;
+    //鏈�澶х嚎绋嬫睜鏁伴噺锛岃〃绀哄綋缂撳啿闃熷垪婊$殑鏃跺�欒兘缁х画瀹圭撼鐨勭瓑寰呬换鍔$殑鏁伴噺
+    private int maxPoolSize;
+    //瀛樻椿鏃堕棿
+    private long keepAliveTime = 1;
+    private TimeUnit unit = TimeUnit.HOURS;
+    private ThreadPoolExecutor executor;
+
+    private ThreadPoolUtil() {
+        //缁檆orePoolSize璧嬪�硷細褰撳墠璁惧鍙敤澶勭悊鍣ㄦ牳蹇冩暟*2 + 1,鑳藉璁ヽpu鐨勬晥鐜囧緱鍒版渶澶х▼搴︽墽琛岋紙鏈夌爺绌惰璇佺殑锛�
+        corePoolSize = Runtime.getRuntime().availableProcessors() * 2 + 1;
+        maxPoolSize = corePoolSize;
+        executor = new ThreadPoolExecutor(
+                //褰撴煇涓牳蹇冧换鍔℃墽琛屽畬姣曪紝浼氫緷娆′粠缂撳啿闃熷垪涓彇鍑虹瓑寰呬换鍔�
+                corePoolSize,
+                // 鐒跺悗new LinkedBlockingQueue(),鐒跺悗maximumPoolSize,浣嗘槸瀹冪殑鏁伴噺鏄寘鍚簡corePoolSize鐨�
+                maxPoolSize,
+                //琛ㄧず鐨勬槸maximumPoolSize褰撲腑绛夊緟浠诲姟鐨勫瓨娲绘椂闂�
+                keepAliveTime,
+                unit,
+                //缂撳啿闃熷垪锛岀敤浜庡瓨鏀剧瓑寰呬换鍔★紝Linked鐨勫厛杩涘厛鍑�
+                new LinkedBlockingQueue(),
+                new DefaultThreadFactory(Thread.NORM_PRIORITY, "thread-pool-"),
+                new ThreadPoolExecutor.AbortPolicy()
+        );
+    }
+
+    public static ThreadPoolUtil getInstance() {
+        if (mInstance == null) {
+            synchronized (ThreadPoolUtil.class) {
+                if (mInstance == null) {
+                    mInstance = new ThreadPoolUtil();
+                }
+            }
+        }
+        return mInstance;
+    }
+
+    /**
+     * 鎵ц浠诲姟
+     *
+     * @param runnable
+     */
+    public void execute(Runnable runnable) {
+        if (executor == null) {
+            executor = new ThreadPoolExecutor(
+                    corePoolSize,
+                    maxPoolSize,
+                    keepAliveTime,
+                    TimeUnit.SECONDS,
+                    new LinkedBlockingQueue(),
+                    new DefaultThreadFactory(Thread.NORM_PRIORITY, "thread-pool-"),
+                    new ThreadPoolExecutor.AbortPolicy());
+        }
+        if (runnable != null) {
+            executor.execute(runnable);
+        }
+    }
+
+    /**
+     * 绉婚櫎浠诲姟
+     *
+     * @param runnable
+     */
+    public void remove(Runnable runnable) {
+        if (runnable != null) {
+            executor.remove(runnable);
+        }
+    }
+
+    private static class DefaultThreadFactory implements ThreadFactory {
+        //绾跨▼姹犵殑璁℃暟
+        private static final AtomicInteger poolNumber = new AtomicInteger(1);
+        //绾跨▼鐨勮鏁�
+        private final AtomicInteger threadNumber = new AtomicInteger(1);
+        private final ThreadGroup group;
+        private final String namePrefix;
+        private final int threadPriority;
+
+        DefaultThreadFactory(int threadPriority, String threadNamePrefix) {
+            this.threadPriority = threadPriority;
+            this.group = Thread.currentThread().getThreadGroup();
+            this.namePrefix = threadNamePrefix + poolNumber.getAndIncrement() + "-thread-";
+        }
+
+        @Override
+        public Thread newThread(@NotNull Runnable r) {
+            Thread thread = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
+            // 杩斿洖True璇ョ嚎绋嬪氨鏄畧鎶ょ嚎绋�
+            // 瀹堟姢绾跨▼搴旇姘歌繙涓嶅幓璁块棶鍥烘湁璧勬簮锛屽锛氭暟鎹簱銆佹枃浠剁瓑銆傚洜涓哄畠浼氬湪浠讳綍鏃跺�欑敋鑷冲湪涓�涓搷浣滅殑涓棿鍙戠敓涓柇銆�
+            if (thread.isDaemon()) {
+                thread.setDaemon(false);
+            }
+            thread.setPriority(threadPriority);
+            return thread;
+        }
+    }
+}

--
Gitblit v1.9.3