কম্পিউটার টিউটোরিয়াল

জাভাতে রান-টাইম স্ট্যাক মেকানিজম


জাভাতে যখনই কোনো প্রসেস, কোড বা থ্রেড চালানোর প্রয়োজন হয়, তখন একটি রান-টাইম স্ট্যাক তৈরি হয় যাতে থ্রেড এক্সিকিউশন সময়ের অপারেশনগুলো সংরক্ষণ করা যায়।

রান-টাইম স্ট্যাকের প্রতিটি এন্ট্রিকে স্ট্যাক ফ্রেম বা এক্টিভেশন রেকর্ড বলা হয়। একবার প্রসেস দ্বারা কোনো ফাংশন কল হলে, তার সংশ্লিষ্ট ডেটা রান-টাইম স্ট্যাক থেকে ডিলিট হয়ে যায়।

যখন সব ফাংশন কল হয়ে যাবে, রান-টাইম স্ট্যাক খালি হয়ে যাবে। এর মানে এটি মেমরি থেকে সরিয়ে ফেলা প্রয়োজন।

এই মুহূর্তে, রান-টাইম স্ট্যাক ধ্বংস হয় এবং তারপর থ্রেডটিও টার্মিনেট হয়।

থ্রেড টার্মিনেশন দুভাবেই হতে পারে: থ্রেড 정상ভাবে সম্পূর্ণ হলে (voluntarily) বা বাধ্যতামূলকভাবে (abnormal termination)।

রান-টাইম স্ট্যাকে এলিমেন্ট ধ্বংসের ক্রম, এন্ট্রি তৈরির ক্রমের বিপরীত।

যখন থ্রেড нормально কাজ করে এবং এক্সিকিউশন সম্পন্ন করে, main ফাংশন কল হয় এবং এর এন্ট্রি রান-টাইম স্ট্যাকে সংরক্ষিত হয়। একইভাবে, অন্যান্য ফাংশন (যদি থাকে) কল হয় এবং তাদের এন্ট্রি সংরক্ষিত হয়। যখন ফাংশনগুলো এক্সিকিউশন শেষ করে, রান-টাইম স্ট্যাক থেকে এন্ট্রি সরাতে হয়। সবশেষে এক্সিকিউট হওয়া ফাংশনটি প্রথমে যে এন্ট্রিটি মুছে ফেলা হয়।

যখন থ্রেড অস্বাভাবিকভাবে টার্মিনেট হয়, তার মানে কোডের সকল লাইন সফলভাবে এক্সিকিউট হয়নি। এর মানে একটি এক্সেপশন উঠেছে যেহেতু একটি এরর মুখোমুখি হয়েছে। নিচে একটি উদাহরণ দেওয়া হলো:

উদাহরণ

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)

Demo ক্লাসে main ফাংশন আছে যেখানে 'test' ফাংশন কল করা হয়েছে। 'test' ফাংশন সংজ্ঞায়িত আছে যেখানে 'test_2' ফাংশন কল করা হয়েছে। 'test_2' নামে একটি ফাংশন সংজ্ঞায়িত আছে যেখানে একটি সংখ্যা ০ দিয়ে ভাগ করার চেষ্টা করা হয়েছে। এর ফলে একটি এক্সেপশন উঠেছে যা কনসোলে প্রিন্ট হয়েছে। অতএব, কন্ট্রোল 'println' লাইন পর্যন্ত পৌঁছাতে পারেনি যা এরর মেসেজ প্রিন্ট করতে হতো।

  1. জাভাতে থ্রেড প্রায়োরিটির গুরুত্ব

  2. জাভাতে থ্রেড স্টপ করুন

  3. জাভাতে ইউজার থ্রেড এবং ডেমন থ্রেডের পার্থক্য

  4. জাভাতে join() মেথডের গুরুত্ব