मैं सिर्फ JDK 1.7.0_03 खोलने के लिए ओरेकल JDK 1.6, इसे अपनाया है, और मैं बाहर निकलने पर एक नहीं बल्कि उल्लेखनीय गतिरोध पर पहुंच जाते हैं:सिस्टम.एक्सिट लिनक्स पर थ्रेड-सुरक्षित नहीं है?
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1258)
- locked <0x8608dda0> (a sun.awt.X11.XToolkit$1$1)
at java.lang.Thread.join(Thread.java:1332)
at java.lang.ApplicationShutdownHooks.runHooks(ApplicationShutdownHooks.java:106)
at java.lang.ApplicationShutdownHooks$1.run(ApplicationShutdownHooks.java:46)
at java.lang.Shutdown.runHooks(Shutdown.java:123)
at java.lang.Shutdown.sequence(Shutdown.java:167)
at java.lang.Shutdown.exit(Shutdown.java:212)
- locked <0x8603df28> (a java.lang.Class for java.lang.Shutdown)
at java.lang.Runtime.exit(Runtime.java:107)
at java.lang.System.exit(System.java:960)
ऐसा लगता है कि आप AWT से System.exit कॉल करना होगा घटना कतार क्या यह सच है? सन डॉक्स Runtime.exit
में थ्रेड आवश्यकता का कोई दस्तावेज नहीं है, मैंने अन्य आश्चर्यजनक मामलों को मारा है जहां एडब्ल्यूटी ट्री लॉक केवल लिनक्स पर आवश्यक है, लेकिन यह केक लेता है। क्या यह एक बग है, या क्या मैंने अभी दस्तावेज़ में कुछ याद किया है?
एक SSCCE (http://sscce.org/) गतिरोध का प्रदर्शन मिल गया? – NPE
'वर्चुअल.एक्सिट' विधि जावा वर्चुअल मशीन में सभी थ्रेडों को समाप्त करने के लिए मजबूर करता है। आप सिस्टम.एक्सिट का उपयोग कर उल्लिखित डेडलॉक समस्या को ठीक नहीं कर रहे हैं, आप डेडलॉक होने से पहले प्रोग्राम को रोक रहे हैं। जब आप सामान्य रूप से रुकते हैं, तो आपके अन्य थ्रेड मुख्य धागे की सहायता के बिना जारी रहते हैं और स्पष्ट रूप से वे इसके बिना ऐसा नहीं कर सकते हैं। –