2012-03-31 35 views
5
/** 
    * Atomically update Java variable to <tt>x</tt> if it is currently 
    * holding <tt>expected</tt>. 
    * @return <tt>true</tt> if successful 
    */ 
    public final native boolean compareAndSwapObject(Object o, long offset, 
                Object expected, 
                Object x); 

1) Làm cách nào để "nguyên tử" đặt giá trị "o" ở vị trí "offset" thành "x" nếu "value == expected"?Thực hiện lớp mặt trời không an toàn

2) Làm cách nào để "khóa" đối tượng khi chúng tôi sử dụng phương thức đồng bộ hoặc khối được đồng bộ hóa? Tôi chỉ tò mò muốn biết những gì đi dưới mui xe.

+0

Tôi nghĩ bạn sẽ cần một sách giáo khoa. –

+0

@ TomHawtin-tackline Bạn có thể cho tôi tên/bất kỳ sách giáo khoa nào không? –

+3

Thực ra, tôi nghi ngờ rằng có một cuốn sách giáo khoa bao gồm chủ đề chính xác/sâu sắc. Đó là thứ bạn chọn trên phố. –

Trả lời

4
  1. Vì đây là phương pháp gốc, chúng sẽ quay trở lại bất kỳ thứ gì được cung cấp bởi nền tảng đích. IIRC, "so sánh và trao đổi" đã có mặt trên MIPS và SPARC như là bộ xử lý hơn 10 năm trước.

  2. họ sử dụng một cái gì đó giống như 1 đằng sau hậu trường để có được khóa trên đối tượng

2

Yep, cuộc gọi compareAndSwapObject chuyển thành cuộc gọi phương thức gốc hoặc mở rộng nội tuyến thực hiện so sánh và trao đổi bằng cơ sở phần cứng gốc.

Để triển khai từ khóa synchronized, bất kỳ số kỹ thuật nào cũng có thể được sử dụng, nhưng tất cả đều giống như khái niệm so sánh và trao đổi.

Các vấn đề liên quan