हर बार जावा में किसी प्रक्रिया या कोड या थ्रेड को चलाने की आवश्यकता होती है, एक रनटाइम स्टैक बनाया जाता है ताकि थ्रेड को निष्पादित करते समय किए गए कार्यों को संग्रहीत किया जा सके।
रन-टाइम स्टैक में प्रत्येक प्रविष्टि को स्टैक फ्रेम या सक्रियण रिकॉर्ड के रूप में जाना जाता है। एक बार जब किसी फ़ंक्शन को प्रक्रिया द्वारा कॉल किया जाता है, तो उससे संबंधित डेटा रनटाइम स्टैक से हटा दिया जाता है।
एक बार सभी कार्यों को कॉल करने के बाद, रनटाइम स्टैक खाली हो जाएगा। इसका मतलब है कि इसे मेमोरी से हटाने की जरूरत है।
इस समय, रनटाइम स्टैक नष्ट हो जाता है और फिर थ्रेड भी समाप्त हो जाता है।
एक बार थ्रेड पूरा हो जाने पर (स्वेच्छा से) या जबरदस्ती (असामान्य समाप्ति) थ्रेड की समाप्ति हो सकती है।
रनटाइम स्टैक में तत्वों के विनाश का क्रम रनटाइम कार्य में प्रविष्टियों के निर्माण के विपरीत क्रम है।
जब थ्रेड सामान्य रूप से संचालित होता है, और निष्पादन पूरा करता है, तो मुख्य फ़ंक्शन को कॉल किया जाता है और इसकी प्रविष्टि रनटाइम स्टैक में संग्रहीत की जाएगी। इसी तरह, अन्य कार्यों (यदि कोई हो) को बुलाया जाता है और उनकी प्रविष्टियां संग्रहीत की जाती हैं। जब कार्यों का निष्पादन पूरा हो जाता है, तो रनटाइम स्टैक से प्रविष्टियों को हटाने का समय आ जाता है। अंतिम कार्य जो निष्पादित किया गया था वह पहला है जिसकी प्रविष्टि हटा दी गई है।
जब थ्रेड असामान्य रूप से समाप्त हो जाता है, तो इसका मतलब है कि कोड की सभी पंक्तियों को सफलतापूर्वक निष्पादित नहीं किया जा सकता है। इसका मतलब है कि एक त्रुटि का सामना करने के बाद से एक अपवाद उठाया गया है। नीचे उसी का एक उदाहरण है -
उदाहरण
public class Demo{ public static void main(String[] args){ test(); } public static void test(){ test_2(); System.out.println("This is a test method."); } public static void test_2(){ System.out.println(45/0); System.out.println("This is a method that divides 10 by 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)
डेमो नामक एक वर्ग में मुख्य कार्य होता है जिसमें 'परीक्षण' फ़ंक्शन कहा जाता है। 'टेस्ट' फ़ंक्शन को परिभाषित किया गया है जिसमें 'test_2' फ़ंक्शन कहा जाता है। 'Test_2' नाम के एक फ़ंक्शन को परिभाषित किया जाता है जिसमें किसी संख्या को 0 से विभाजित करने का प्रयास किया जाता है। इसके परिणामस्वरूप एक अपवाद होता है जो कंसोल पर मुद्रित होता है। इसलिए, त्रुटि संदेश को प्रिंट करने के लिए नियंत्रण 'println' लाइन तक नहीं पहुंचता है।