Я видел вопрос here заданный @Tej Киран, который точно мой вопрос, но он не ответил, последний комментарий говорит:Как предотвратить выключение крюка от блокировки?
«Вы знаете, если есть какие-либо отключения крючки, зарегистрированные в вашей приложение, или если какая-либо из библиотек, которые вы используете, имеет крючок остановки ? Крюк отключения - это поток, и если в этом потоке есть тупик , который никогда не заканчивается, JVM будет никогда не выходить. "
Существует метод выключения крюк в моей программе
Runtime.getRuntime().addShutdownHook(new Thread("Shutdown Hook") {
@Override
public void run() {
System.out.println("---------------");
System.out.printf("%d threads running%n", Thread.activeCount());
Map<Thread, StackTraceElement[]> threads = Thread
.getAllStackTraces();
for (Entry<Thread, StackTraceElement[]> e : threads.entrySet()) {
Thread t = e.getKey();
System.out.printf("%s\t%s\t%s%n", t.getName(),
t.isDaemon(), t.isAlive());
StackTraceElement[] elements = e.getValue();
for (StackTraceElement trc : elements) {
System.out.println("\t" + trc);
}
}
System.out.println("---------------");
try {UIUtil.cancelAllTasks();} catch (Throwable e) {e.printStackTrace();};
try {mehad.io.port.ScannerManager.disableAutoHandshake();} catch (Throwable e) {e.printStackTrace();};
try {mehad.io.port.ComPortInterface.getInstance().close();} catch (Throwable e) {e.printStackTrace();};
try {
if (lockStream != null) {
lockStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
Но я не знаю, как отличить, если есть тупиковой в моем выключение крючок и, если есть, как ее решить ,
Вы пытались убить -3? или на wondows jstack? –
Я не знаю, как это сделать ?! @ThomasKrieger –
Вы используете окна или Linux? –