ho visto una domanda posta da here @Tej Kiran che è esattamente la mia domanda, ma non riceve risposta, l'ultimo commento dice:Come impedire al gancio di arresto di ottenere un deadlock?
"Sa se ci sono dei ganci di arresto registrati nel vostro applicazione, o se una delle librerie che si sta utilizzando ha un hook di shutdown ? Il hook di shutdown è un thread, e se c'è un deadlock in quel thread che non termina mai, la JVM non uscirà mai . "
C'è un gancio di arresto metodo nel mio programma
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();
}
}
});
Ma non so come distinguere se v'è una situazione di stallo nel mio gancio di arresto e se c'è, come risolverlo .
hai provato a uccidere -3? o sulle meraviglie jstack? –
Non so come farlo ?! @ThomasKrieger –
stai usando windows o linux? –