Một chút trợ giúp, vui lòng xem xét mã bit bên dưới.Khóa Reentrant
public class Widget {
public synchronized void doSomething() {
...
}
}
public class LoggingWidget extends Widget {
public synchronized void doSomething() {
System.out.println(toString() + ": calling doSomething");
super.doSomething();
}
}
Tôi đọc rằng khi doSomething() trong LoggingWidget được gọi, JVM sẽ cố gắng lấy khóa trên LoggingWidget trước và sau đó trên Widget.
Tôi rất tò mò muốn biết lý do. Có phải vì JVM biết rằng doSomething() có một cuộc gọi đến super.doSomething() hoặc bởi vì gọi một phương thức lớp con sẽ luôn có được một khóa trên lớp cha.
Cheers
Bạn nên đăng tham chiếu đến nơi bạn đọc này vì nó không đúng :-) –
Cảm ơn sự giúp đỡ của bạn. Tôi hiểu nhầm lời giải thích về khóa reentrant.Sau khi đọc lời giải thích của bạn, tôi đã quay trở lại nguồn (một trích đoạn từ cuốn sách Đồng thời trong thực tế) và bây giờ nó có ý nghĩa. – CaptainHastings