Tôi đã nhìn thấy một câu hỏi here hỏi bởi @Tej Kiran đó là chính xác những câu hỏi của tôi nhưng nó không được trả lời, bình luận cuối cùng nói:Làm thế nào để ngăn chặn móc tắt máy khỏi bị bế tắc?
"Bạn có biết nếu có bất kỳ móc tắt máy đăng ký tại của bạn ứng dụng hoặc nếu bất kỳ thư viện nào bạn đang sử dụng có móc khóa tắt là ? Móc tắt là một chuỗi và nếu có một khóa chết trong chuỗi đó khiến nó không bao giờ chấm dứt, JVM sẽ không bao giờ thoát. "
Có một cái móc tắt phương pháp trong chương trình của tôi
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();
}
}
});
Nhưng tôi không biết làm thế nào để phân biệt nếu có một bế tắc trong móc tắt máy của tôi và nếu có bất kỳ, làm thế nào để giải quyết nó .
bạn đã thử giết -3 chưa? hoặc trên kỳ diệu jstack? –
Tôi không biết làm thế nào để làm điều đó ?! @ThomasKrieger –
bạn đang sử dụng windows hay linux? –