From 4b03b7cc1e44d77ae97d01da27ce7b995c141d81 Mon Sep 17 00:00:00 2001 From: LamGC Date: Sun, 15 Aug 2021 13:28:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=BB=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E9=98=BB=E5=A1=9E=E5=94=A4=E9=86=92=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当程序退出, 触发 ShutdownHook 时, 由于未进入 mainThreadWaiter 对象线程锁范围, 所以会导致 notifyAll 调用失败. --- .../java/net/lamgc/oracle/sentry/ApplicationMain.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/lamgc/oracle/sentry/ApplicationMain.java b/src/main/java/net/lamgc/oracle/sentry/ApplicationMain.java index 034faec..dd1748e 100644 --- a/src/main/java/net/lamgc/oracle/sentry/ApplicationMain.java +++ b/src/main/java/net/lamgc/oracle/sentry/ApplicationMain.java @@ -21,12 +21,18 @@ public class ApplicationMain { public static void main(String[] args) { SpringApplication.run(ApplicationMain.class, args); - Runtime.getRuntime().addShutdownHook(new Thread(mainThreadWaiter::notifyAll, "ShutdownMainThread")); + + Runtime.getRuntime().addShutdownHook(new Thread(() -> { + synchronized (mainThreadWaiter) { + mainThreadWaiter.notifyAll(); + } + }, "ShutdownMainThread")); + synchronized (mainThreadWaiter) { try { mainThreadWaiter.wait(); } catch (InterruptedException e) { - log.warn("", e); + log.warn("主线程发生中断.", e); } } }