2011-12-28 14 views
6

यह लिंक जो बताते हैं कि "यह सिर्फ काम करता है" लगता है: (मूल निवासी धागे अटैच किया जा रहा 7.3 के तहत बहुत दूर तल पर) http://java.sun.com/docs/books/jni/html/invoke.htmlक्या होता है यदि मैं जेएनआई के साथ सी से एकाधिक धागे से जावा फ़ंक्शन को कॉल करता हूं?

मैं नहीं दिख रहा है कि कैसे संभव है, एम्बेडेड JVM अपनी ही शुरू करने जा रहा है थ्रेड स्वचालित रूप से? या जेएनआई कॉल कतार? वही वर्चुअल मशीन पर और कॉल कैसे हो सकते हैं। जिसे मैंने कोई थ्रेडिंग करने का निर्देश नहीं दिया है?

किसी भी तरह से मैं कल्पना कर सकता हूं कि काम करने के लिए, यदि जावा कोड को कोड कोड के रूप में उसी कॉलिंग थ्रेड में निष्पादित किया जाएगा। क्या वो सही है? इसका मतलब यह होगा कि मुझे जावा में कोई थ्रेडिंग करने की ज़रूरत नहीं है।

+0

आपके द्वारा लिंक किए गए आलेख के लिए, आपको जावा में कोई थ्रेडिंग करने की आवश्यकता नहीं है। एक और सवाल यह है कि यदि JVM अपना अलग थ्रेड बनाता है या केवल मूल धागे का उपयोग करता है (हालांकि मैं बाद में सट्टेबाजी कर रहा हूं)। – SJuan76

उत्तर

4

जेवीएम को अपने स्वयं के धागे बनाने की ज़रूरत नहीं है, विधि कॉल उन देशी धागे पर निष्पादित की जाती है जो उन्हें बनाती हैं। AttachCurrentTread और DetachCurrentThread किसी भी आवश्यक जेवीएम आंतरिक राज्य प्रबंधन का ख्याल रखेगा, उदाहरण के लिए मूल धागे को लपेटकर जावा थ्रेड ऑब्जेक्ट्स बनाना।

+0

हां, मैंने इसे विकिपीडिया पर पाया: 'एक बार संलग्न होने पर, मूल धागा नियमित जावा थ्रेड की तरह काम करता है जो मूल विधि के भीतर चल रहा है। जब तक यह DetachCurrentThread() को अलग करने के लिए कॉल नहीं करता है तब तक मूल धागा वीएम से जुड़ा रहता है – Blub

0

जेवीएम अपने स्वयं के धागे शुरू करता है जिसे इसे चलाने की आवश्यकता है। आप जेवीएम शुरू करके इस धागे निर्माण को ट्रिगर करते हैं।

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