ทุกครั้งที่ต้องเรียกใช้กระบวนการหรือโค้ดหรือเธรดใน Java รันไทม์สแต็กจะถูกสร้างขึ้นเพื่อจัดเก็บการดำเนินการที่ดำเนินการในขณะที่รันเธรด
ทุกรายการในสแต็กรันไทม์เรียกว่าสแต็กเฟรมหรือบันทึกการเปิดใช้งาน เมื่อกระบวนการเรียกใช้ฟังก์ชันแล้ว ข้อมูลที่เกี่ยวข้องจะถูกลบออกจากรันไทม์สแต็ก
เมื่อเรียกใช้ฟังก์ชันทั้งหมดแล้ว สแต็กรันไทม์จะว่างเปล่า ซึ่งหมายความว่าจำเป็นต้องลบออกจากหน่วยความจำ
ณ เวลานี้ รันไทม์สแต็กจะถูกทำลาย จากนั้นเธรดจะถูกยกเลิกด้วย
การสิ้นสุดของเธรดอาจเกิดขึ้นได้เมื่อเธรดเสร็จสิ้น (โดยสมัครใจ) หรือโดยสมบูรณ์ (การสิ้นสุดแบบผิดปกติ)
ลำดับการทำลายองค์ประกอบในรันไทม์สแต็กเป็นลำดับที่ตรงกันข้ามกับการสร้างรายการในงานรันไทม์
เมื่อเธรดทำงานตามปกติ และดำเนินการเสร็จสิ้น ฟังก์ชันหลักจะถูกเรียกและรายการจะถูกเก็บไว้ในรันไทม์สแต็ก ในทำนองเดียวกัน ฟังก์ชันอื่นๆ (ถ้ามี) จะถูกเรียกใช้และรายการต่างๆ จะถูกจัดเก็บไว้ เมื่อฟังก์ชันดำเนินการเสร็จสิ้น ก็ถึงเวลาที่จะลบรายการออกจากรันไทม์สแต็ก ฟังก์ชันสุดท้ายที่ดำเนินการคือฟังก์ชันแรกที่มีการลบรายการออก
เมื่อเธรดหยุดทำงานอย่างผิดปกติ หมายความว่าทุกบรรทัดของโค้ดไม่สามารถดำเนินการได้สำเร็จ ซึ่งหมายความว่ามีข้อยกเว้นเกิดขึ้นเนื่องจากพบข้อผิดพลาด ด้านล่างนี้เป็นตัวอย่างของสิ่งเดียวกัน −
ตัวอย่าง
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 มีฟังก์ชันหลักที่เรียกฟังก์ชัน 'test' ฟังก์ชัน 'test' ถูกกำหนดโดยที่ฟังก์ชัน 'test_2' ถูกเรียก ฟังก์ชันชื่อ 'test_2' ถูกกำหนดโดยพยายามหารตัวเลขด้วย 0 ซึ่งส่งผลให้มีข้อยกเว้นที่พิมพ์บนคอนโซล ดังนั้นตัวควบคุมไม่ถึงบรรทัด 'println' เพื่อพิมพ์ข้อความแสดงข้อผิดพลาด