Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

जावा में रन-टाइम स्टैक मैकेनिज्म

हर बार जब जावा में किसी प्रोसेस, कोड या थ्रेड को चलाने की आवश्यकता होती है, तो थ्रेड को निष्पादित करते समय किए गए ऑपरेशन्स को स्टोर करने के लिए एक रनटाइम स्टैक बनाया जाता है।

रन-टाइम स्टैक में हर एंट्री को स्टैक फ्रेम या एक्टिवेशन रिकॉर्ड के रूप में जाना जाता है। एक बार जब किसी फंक्शन को प्रोसेस द्वारा कॉल किया जाता है, तो उससे जुड़ा डेटा रनटाइम स्टैक से हटा दिया जाता है।

एक बार सभी फंक्शन्स कॉल हो जाने के बाद, रनटाइम स्टैक खाली हो जाएगा। इसका मतलब है कि इसे मेमोरी से हटाने की आवश्यकता है।

इस समय, रनटाइम स्टैक नष्ट हो जाता है और फिर थ्रेड भी समाप्त हो जाता है।

थ्रेड का समापन तब हो सकता है जब थ्रेड पूरा हो जाता है (स्वेच्छा से) या जबरदस्ती (असामान्य समाप्ति)।

रनटाइम स्टैक में तत्वों के विनाश का क्रम रनटाइम टास्क में प्रविष्टियों के निर्माण के क्रम के विपरीत होता है।

जब थ्रेड सामान्य रूप से संचालित होता है और निष्पादन पूरा करता है, तो मुख्य फंक्शन को कॉल किया जाता है और इसकी एंट्री रनटाइम स्टैक में स्टोर की जाती है। इसी तरह, अन्य फंक्शन्स (यदि कोई हों) कॉल किए जाते हैं और उनकी एंट्रीज स्टोर की जाती हैं। जब फंक्शन्स ने निष्पादन पूरा कर लिया है, तो रनटाइम स्टैक से प्रविष्टियों को हटाने का समय आ गया है। अंतिम निष्पादित फंक्शन वह पहला है जिसकी एंट्री हटाई जाती है।

जब थ्रेड असामान्य रूप से समाप्त होता है, तो इसका मतलब है कि कोड की सभी लाइन्स को सफलतापूर्वक निष्पादित नहीं किया जा सका। इसका मतलब है कि एक अपवाद उठाया जाता है क्योंकि एक त्रुटि का सामना करना पड़ा। नीचे इसका एक उदाहरण दिया गया है:

उदाहरण

public class Demo{ 
    public static void main(String[] args){ 
        test(); 
    } 
    public static void test(){ 
        test_2(); 
        System.out.println("यह एक टेस्ट मेथड है।"); 
    } 
    public static void test_2(){ 
        System.out.println(45/0); 
        System.out.println("यह एक मेथड है जो 10 को 0 से विभाजित करता है।"); 
    } 
}

आउटपुट

Exception in thread "main" java.lang.ArithmeticException: / by zero 
at Demo.test_2(Demo.java:14) 
at Demo.test(Demo.java:9) 
at Demo.main(Demo.java:5)

Demo नामक एक क्लास में मुख्य फंक्शन होता है जिसमें test फंक्शन को कॉल किया जाता है। test फंक्शन को परिभाषित किया जाता है जिसमें test_2 फंक्शन को कॉल किया जाता है। test_2 नामक एक फंक्शन को परिभाषित किया जाता है जिसमें एक संख्या को 0 से विभाजित करने का प्रयास किया जाता है। इसके परिणामस्वरूप एक अपवाद होता है जो कंसोल पर प्रिंट होता है। इसलिए, कंट्रोल त्रुटि संदेश प्रिंट करने के लिए println लाइन तक नहीं पहुंचता।

  1. - Java में थ्रेड को कैसे रोकें?

    जब भी हम Java में Thread क्लास के stop() मेथड को कॉल करके रनिंग स्टेट से थ्रेड को रोकना चाहते हैं। यह मेथड रनिंग थ्रेड के निष्पादन को रोकता है और इसे वेटिंग थ्रेड्स पूल से हटा देता है और गार्बेज कलेक्टेड होता है। जब थ्रेड अपने मेथड के अंत तक पहुंचता है तो यह स्वचालित रूप से डेड स्टेट में चला जाता है

  1. - जावा में यूजर थ्रेड और डेमन थ्रेड में अंतर?

    डेमन थ्रेड्स आमतौर पर यूजर थ्रेड्स के लिए सेवाएं करने के लिए उपयोग किए जाते हैं। एप्लिकेशन थ्रेड का main() मेथड एक यूजर थ्रेड (नॉन-डेमन थ्रेड) है। JVM तब तक समाप्त नहीं होता जब तक सभी यूजर थ्रेड (नॉन-डेमन) समाप्त नहीं हो जाते। हम setDaemon(true) को कॉल करके यूजर थ्रेड द्वारा बनाए गए थ्रेड को स्पष्ट

  1. - जावा में join() मेथड का महत्व?

    join() Thread क्लास का एक फाइनल मेथड है और इसका उपयोग एक थ्रेड के निष्पादन की शुरुआत को दूसरे थ्रेड के निष्पादन के अंत से जोड़ने के लिए किया जा सकता है ताकि एक थ्रेड तब तक चलना शुरू न करे जब तक दूसरा थ्रेड समाप्त न हो जाए। यदि join() मेथड को थ्रेड इंस्टेंस पर कॉल किया जाता है, तो वर्तमान में चल रहा