मैं एक सवाल 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 की कोशिश की है? या आश्चर्य पर jstack? –
मुझे नहीं पता कि यह कैसे करना है ?! @ थॉमसक्रिगर –
क्या आप विंडोज या लिनक्स का उपयोग कर रहे हैं? –