2009-12-22 15 views
6

मेरे पास कुछ मूल धागा है जिसे जावा में कॉल करने की आवश्यकता है। इसके लिए, मुझे AttachCurrentThread का उपयोग करके थ्रेड को वीएम में संलग्न करने की आवश्यकता है। चूंकि यह कॉलबैक अक्सर होता है, इसलिए धागा शायद संलग्न रहना चाहिए। कॉलिंग AttachCurrentThread कई बार ठीक है ("एक धागा है कि पहले से ही जुड़ा हुआ है संलग्न करने के लिए कोशिश कर रहा एक नहीं-op है।")क्या मुझे जेएनआई संलग्न संलग्न थ्रेड करना है?

,, मैं धागा बाहर निकलता से पहले DetachCurrentThread कॉल करने के लिए है यह अपने आप हो जाएगा या यह भी नहीं है आवश्यक? अगर मुझे अलग करना है तो क्या होगा, लेकिन नहीं? क्या यह सिर्फ "रिसाव" होगा, या यह भी वीएम राज्य को दूषित कर सकता है?

मैंने जावा मूल इंटरफ़ेस विनिर्देश की जांच की है, लेकिन या तो इसे याद किया है, या यह वास्तव में निर्दिष्ट नहीं है।

मेरा प्रश्न विशेष रूप से विंडोज एक्सपी पर सूर्य जेडीके 6 पर लागू होता है।

उत्तर

8

मुझे लगता है कि पुष्टि है कि आप चाहते हैं यहाँ है: http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/invocation.html#wp1060

एक देशी धागा वीएम से जुड़ी DetachCurrentThread कॉल करना होगा() बाहर निकलने से पहले रूप से अलग कर सकते हैं।

और अगले भाग में, वहाँ तर्क है:

वीएम इंतजार कर रहा है जब तक कि वर्तमान धागा केवल गैर डेमॉन उपयोगकर्ता धागा इससे पहले कि यह वास्तव में अनलोड है। उपयोगकर्ता धागे में जावा थ्रेड और संलग्न मूल धागे दोनों शामिल हैं।

+0

डर्न, मैं हर समय जेडीके 5 जेएनआई स्पेक देख रहा था। "वीएम से अलग करना" अनुभाग जेडीके 6 दस्तावेज़ों में नया है। आपकी सहायताके लिए धन्यवाद! –

+0

मेरी इच्छा है कि * क्यों * इसे DetachCurrentThread() को कॉल करना होगा। यदि मूल धागा एक डिमन के रूप में जुड़ा हुआ है, तो VM * संलग्न देशी धागे को समाप्त करने के लिए * नहीं * प्रतीक्षा करेगा। – technomage

संबंधित मुद्दे