Trước tiên hãy để tôi nhấn mạnh rằng việc sửa đổi biến được sử dụng để đồng bộ hóa là điều khủng khiếp xấu ™. obj1
phải là final
và không bao giờ được chạm vào nếu nó được sử dụng làm màn hình.
đó đang được nói, trở lại câu hỏi của bạn:
Nếu JVM đầu tiên thực hiện thread1, nó đồng bộ hóa trên obj1
, đặt nó vào null
và các lối ra chủ đề. Chuỗi thứ hai muốn đồng bộ hóa trên obj1
, NullPointerException
sẽ bị ném. Bởi vì sửa đổi của obj1
được thực hiện trong khối đồng bộ, nó được đảm bảo rằng Thread2 sẽ thấy giá trị cập nhật (vì vậy: NullPointerException
được đảm bảo).
Nếu Thread1 bị gián đoạn sau khi lấy khóa trên obj1
nhưng trước khi xóa tham chiếu, Thread2 sẽ khóa obj1
và đợi cho đến khi Thread1 kết thúc. Sau đó, nó sẽ nhập thành công màn hình vì đối tượng trước đó được tham chiếu bởi obj1
vẫn tồn tại.
Nguồn
2012-04-17 16:22:25
@ KorhanÖztürk Anh ấy không thể thử bản thân mình, bất kỳ loại vấn đề liên quan đến đồng thời nào cũng không xác định. Những loại nhận xét này cực kỳ bực bội khi bối cảnh không được biết đến. –