मुझे वर्तमान चल रहे थ्रेड के लिए कुछ निकास कोड इंजेक्ट करने में सक्षम होना चाहिए। ,थ्रेड निकास कॉलबैक
public static void injectThreadExitCallback(final Runnable callback) {
final curr = Thread.currentThread();
new Thread() {
@Override
public void run() {
try {
curr.join();
callback.run();
} catch (InterruptedException ex) {
... logging ...
}
}
}.start();
}
यह ठीक से काम करने लगता है और मैं वास्तव में क्या चाहते रहा हूँ करता है: मैं थोड़ी देर के लिए यह एक साथ संघर्ष किया है, और मैं अंत में एक समाधान के साथ आया था यहाँ कुछ कोड के लिए मैं क्या कर रहा हूँ के समान है मेरी एकमात्र चिंता यह है कि, यदि यह किसी भी लीकिंग या अन्य अवांछित साइड इफेक्ट्स का कारण बनता है, तो मैं देख नहीं सकता हूं।
या यह बिल्कुल ठीक है, यदि ऐसा है तो यह बहुत उपयोगी है। मैं एक साधारण पुस्तकालय देख सकता था जो मौजूदा धागे में गतिशील रूप से निकास कोड जोड़ सकता है।
ठीक लग रहा है; बस जागरूक रहें कि कॉलबैक एक अलग धागे पर चल रहा है। –
कॉलबैक को 'आखिरकार' ब्लॉक पर ले जाने का अर्थ है कि अगर 'जुड़ने' में कोई अपवाद फेंकता है तो यह तब होगा जब * लक्ष्य थ्रेड से बाहर निकल जाएगा *। इसके अलावा, जब तक कोई बाहरी एजेंट सभी धागे में बाधा डालने शुरू नहीं करता है तब तक शामिल होना कभी अपवाद नहीं फेंक देगा। –
यदि इस विधि के अंदर आपके द्वारा बनाए गए अनाम थ्रेड को बाधित किया गया है, तो यह अत्यधिक संदिग्ध है कि कॉलबैक लागू किया जाना चाहिए या नहीं। धागे को बाधित करने का मुद्दा यह है कि वह क्या कर रहा है उसे रोकना है। चूंकि यह धागा एकमात्र चीज है जो कॉलबैक का आह्वान करने का इंतजार कर रहा है, इसलिए इसे बाधित करने का एकमात्र कारण कॉलबैक को चलने से रोकना होगा। –