From 60a140efb3e6d4617371b74eb4eaea2e24c3c154 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Sat, 2 Jun 2018 19:38:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=97=B6=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E5=87=BA=E7=8E=B0ConcurrentModificationException?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 初始化块执行时字段并不一定都完成了初始化,应当避免使用。 利用ConcurrentHashMap的弱一致性防止迭代中删除账户造成ConcurrentModificationException。 --- .../src/main/java/org/jackhuang/hmcl/setting/Settings.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java index 679ec8f85..937ab255b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Settings.java @@ -42,6 +42,7 @@ import java.net.InetSocketAddress; import java.net.PasswordAuthentication; import java.net.Proxy; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.stream.Collectors; @@ -62,13 +63,11 @@ public class Settings { public static final Settings INSTANCE = new Settings(); - private Settings() {} - private final Config SETTINGS = initSettings(); - private final Map accounts = new HashMap<>(); + private final Map accounts = new ConcurrentHashMap<>(); - { + private Settings() { loadProxy(); for (Iterator> iterator = SETTINGS.getAccounts().iterator(); iterator.hasNext(); ) {