Computer >> Máy Tính >  >> Lập trình >> Java

Cơ chế ngăn xếp thời gian chạy trong Java

Mỗi khi một quy trình hoặc một đoạn mã hoặc một tiểu trình cần chạy trong Java, một ngăn xếp thời gian chạy được tạo để lưu trữ các hoạt động được thực hiện trong khi thực thi tiểu trình đó.

Mọi mục nhập trong ngăn xếp thời gian chạy được gọi là khung ngăn xếp hoặc bản ghi kích hoạt. Sau khi một hàm đã được quy trình gọi, dữ liệu liên quan của nó sẽ bị xóa khỏi ngăn xếp thời gian chạy.

Khi tất cả các hàm đã được gọi, ngăn xếp thời gian chạy sẽ trống. Điều này có nghĩa là nó cần được xóa khỏi bộ nhớ.

Tại thời điểm này, ngăn xếp thời gian chạy bị phá hủy và sau đó luồng cũng bị kết thúc.

Việc chấm dứt chuỗi có thể xảy ra sau khi chuỗi hoàn thành (nhanh chóng) hoặc cưỡng bức (chấm dứt bất thường).

Thứ tự hủy các phần tử trong ngăn xếp thời gian chạy là thứ tự ngược lại với việc tạo các mục trong tác vụ thời gian chạy.

Khi luồng hoạt động bình thường và hoàn thành việc thực thi, hàm chính được gọi và mục nhập của nó sẽ được lưu trữ trong ngăn xếp thời gian chạy. Tương tự, các hàm khác (nếu có) được gọi và các mục nhập của chúng được lưu trữ. Khi các chức năng đã hoàn thành việc thực thi, đã đến lúc xóa các mục nhập khỏi ngăn xếp thời gian chạy. Hàm cuối cùng được thực thi là hàm đầu tiên có mục nhập bị xóa.

Khi luồng kết thúc bất thường, điều đó có nghĩa là tất cả các dòng của mã không thể được thực thi thành công. Điều này có nghĩa là một ngoại lệ được đưa ra kể từ khi gặp lỗi. Dưới đây là một ví dụ về điều tương tự -

Ví dụ

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.");
   }
}

Đầu ra

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)

Một lớp có tên Demo chứa hàm chính trong đó hàm ‘kiểm tra’ được gọi. Hàm 'test' được định nghĩa trong đó hàm 'test_2' được gọi. Một hàm có tên ‘test_2’ được xác định trong đó một số được thử chia cho 0. Điều này dẫn đến một ngoại lệ được in trên bảng điều khiển. Do đó, điều khiển không đến dòng "println" để in thông báo lỗi.