fix: 修复主线程阻塞唤醒失败的问题.

当程序退出, 触发 ShutdownHook 时, 由于未进入 mainThreadWaiter 对象线程锁范围, 所以会导致 notifyAll 调用失败.
This commit is contained in:
LamGC 2021-08-15 13:28:03 +08:00
parent b5d0e0f6a0
commit 4b03b7cc1e
Signed by: LamGC
GPG Key ID: 6C5AE2A913941E1D

View File

@ -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);
}
}
}