मैं सिर्फ एक परीक्षण के रूप में निम्नलिखित कोड लिखा है:
public class DaemonThreadPlay {
public static void main(String [] args) {
Thread daemonThread = new Thread() {
public void run() {
while (true) {
try {
System.out.println("Try block executed");
Thread.sleep(1000l);
} catch (Throwable t) {
t.printStackTrace();
}
}
}
@Override
public void finalize() {
System.out.println("Finalize method called");
}
};
daemonThread.setDaemon(true);
daemonThread.start();
try {
Thread.sleep(2500l);
} catch (Throwable t) {
//NO-OP
}
}
}
मैं डेमॉन धागे की पकड़ ब्लॉक में और अंतिम रूप देने विधि में breakpoints डाल दिया। कोशिश ब्लॉक को निष्पादित किए जाने के बावजूद ब्रेकपॉइंट तक पहुंचा नहीं गया था। जाहिर है इस कोड में सिंक्रनाइज़ेशन/टाइमिंग समस्याएं हैं, लेकिन मुझे लगता है कि हम सुरक्षित रूप से निष्कर्ष निकाल सकते हैं कि शटडाउन पर डिमन थ्रेड बाधित नहीं होते हैं और न ही उनके अंतिम() विधियों को जरूरी रूप से लागू किया जाता है।
तुम हमेशा JVM रनटाइम करने के लिए एक बंद हुक जोड़ सकते हैं:
Thread shutdownHook = ... // construct thread that somehow
// knows about all the daemon threads
Runtime.getRuntime().addShutdownHook(shutdownHook);
आपका बंद हुक स्पष्ट रूप से जो कुछ भी कार्य एक "सुंदर" शट डाउन के लिए आवश्यक हैं कर सकते हैं।
क्या आपने सोर्सकोड देखा था? –
@StephenC यह मेरे लिए नहीं हुआ था, और निश्चित रूप से एक निश्चित उत्तर प्राप्त करेगा (हालांकि _necessarily_ उपयोगी नहीं है)। मैं व्यक्तिगत रूप से, हालांकि, कोशिश करने के लिए पर्याप्त बहादुर नहीं हूं और वास्तव में किसी और की अपेक्षा नहीं करता हूं। –
ठीक है, मुझे और अधिक स्पष्ट होने दें। इस तरह के किसी प्रश्न का उत्तर देने का सबसे अच्छा तरीका स्रोत कोड, या कम से कम जावा कोड को देखना है। आम तौर पर यह पढ़ना आसान है और अच्छी तरह से टिप्पणी की है।(और मैं समझता हूँ कि कैसे एक प्रश्न के एक निश्चित जवाब एक गैर निश्चित एक से कम उपयोगी है असफल ... खासकर अगर * यदि आप व्यक्ति कोड को पढ़ने! * थे) –