From 32c5808175c652fcb7fe4a74b1789e190bdeb87b Mon Sep 17 00:00:00 2001 From: HUANG Rongjun Date: Sat, 11 Nov 2023 01:16:35 +0800 Subject: [PATCH 1/2] add --- .../desig/patterns/single/AMapWebConfig.java | 22 ++++--------------- .../patterns/single/AMapWebConfigTest.java | 17 +++++++------- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfig.java b/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfig.java index c540719..2e864e5 100644 --- a/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfig.java +++ b/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfig.java @@ -8,41 +8,27 @@ *

* 用于坐标获取,静态地图等服务 */ -public class AMapWebConfig { +public enum AMapWebConfig { + instance; private final List list; private static final AtomicInteger counter = new AtomicInteger(); - private static volatile AMapWebConfig instance; private AMapWebConfig() { this.list = getList(); } - public static AMapWebConfig getInstance() { - if (instance == null) { - synchronized (AMapWebConfig.class) { - if (instance == null) - instance = new AMapWebConfig(); - } - } - return instance; - } - - protected AMapWebConfig(List list) { - this.list = list; - } - private List getList() { String value = "9a2699c11a7f8fe7382e97fe5d60ecf,7aac08b959dce9eb39b51956b23951b"; return List.of(value.split(",")); } - protected String getNext() { + private String getNext() { int index = counter.getAndIncrement() % list.size(); return list.get(index); } public static String getKey() { - return AMapWebConfig.instance.getNext(); + return instance.getNext(); } } diff --git a/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfigTest.java b/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfigTest.java index 802c86d..fd2a8bd 100644 --- a/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfigTest.java +++ b/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfigTest.java @@ -2,31 +2,31 @@ import java.util.HashSet; import java.util.Set; -import java.util.Timer; -import java.util.TimerTask; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class AMapWebConfigTest { - private static final int THREAD_COUNT = 3000; + private static final int THREAD_COUNT = 10000; private static final CountDownLatch startLatch = new CountDownLatch(1); private static final CountDownLatch finishLatch = new CountDownLatch(THREAD_COUNT); public static void main(String[] args) throws InterruptedException { + ExecutorService executorService = Executors.newFixedThreadPool(THREAD_COUNT); Set set = new HashSet<>(); for (int i = 0; i < THREAD_COUNT; i++) { - new Thread(() -> { + executorService.submit(() -> { try { startLatch.await(); // 等待所有线程都准备好 - AMapWebConfig config = AMapWebConfig.getInstance(); + AMapWebConfig config = AMapWebConfig.instance; set.add(config); - if (set.size() > 1) { + if (set.size() > 1) System.out.println("stop size " + set.size()); - } finishLatch.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } - }).start(); + }); } // 让所有线程同时开始 @@ -34,6 +34,7 @@ public static void main(String[] args) throws InterruptedException { // 等待所有线程执行完毕 finishLatch.await(); + executorService.shutdownNow(); } } From efd377c1c91a5acd317165f88d75e1e77cc03d5e Mon Sep 17 00:00:00 2001 From: HUANG Rongjun Date: Sun, 12 Nov 2023 12:05:35 +0800 Subject: [PATCH 2/2] add --- .../itjun/basic/desig/patterns/single/AMapWebConfig.java | 8 +++++--- .../basic/desig/patterns/single/AMapWebConfigTest.java | 5 ++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfig.java b/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfig.java index 2e864e5..8948344 100644 --- a/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfig.java +++ b/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfig.java @@ -9,7 +9,9 @@ * 用于坐标获取,静态地图等服务 */ public enum AMapWebConfig { - instance; + + INSTANCE; + private final List list; private static final AtomicInteger counter = new AtomicInteger(); @@ -18,7 +20,7 @@ private AMapWebConfig() { } private List getList() { - String value = "9a2699c11a7f8fe7382e97fe5d60ecf,7aac08b959dce9eb39b51956b23951b"; + String value = ""; return List.of(value.split(",")); } @@ -28,7 +30,7 @@ private String getNext() { } public static String getKey() { - return instance.getNext(); + return AMapWebConfig.INSTANCE.getNext(); } } diff --git a/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfigTest.java b/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfigTest.java index fd2a8bd..b5dc38b 100644 --- a/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfigTest.java +++ b/src/main/java/io/itjun/basic/desig/patterns/single/AMapWebConfigTest.java @@ -1,6 +1,9 @@ package io.itjun.basic.desig.patterns.single; +import io.itjun.basic.config.AppConfig; + import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; @@ -18,7 +21,7 @@ public static void main(String[] args) throws InterruptedException { executorService.submit(() -> { try { startLatch.await(); // 等待所有线程都准备好 - AMapWebConfig config = AMapWebConfig.instance; + AMapWebConfig config = AMapWebConfig.INSTANCE; set.add(config); if (set.size() > 1) System.out.println("stop size " + set.size());