Tôi có 2 phương thức được đồng bộ trong một lớp nói phương thức 1() và phương thức 2(). Một chủ đề nói "Thread 1" giữ khóa trên đối tượng của lớp bằng cách thực hiện phương thức đồng bộ1() .Chủ đề khác có thể nói "Thread 2", truy cập khóa thông qua phương thức 2() cùng lúc trong khi giữ "Thread 1" khoá.hai phương thức đồng bộ khác nhau của cùng một đối tượng?
Trường hợp này tương tự với lớp java.util.Vector có các phương thức add() và remove() đã đồng bộ hóa. Vui lòng giải thích trường hợp này quá.
Cảm ơn Borealid .. Nhưng nếu đây là trường hợp, Tại sao java cung cấp đồng bộ hóa cụ thể các phương pháp, nó có thể chỉ được cung cấp cho cả lớp? – JavaUser
@JavaUser: 'synchronized (this)' không có nghĩa là toàn bộ lớp được 'đồng bộ'. Nó có nghĩa là bạn có được khóa Object của cá thể mà phương thức được gọi. Bạn không nhất thiết muốn * tất cả * của các phương thức được 'đồng bộ hóa' (trên thực tế, bạn hiếm khi nào). Để có được hiệu suất của mã đa luồng, bạn phải sử dụng càng ít ổ khóa càng tốt trong khi vẫn giữ được độ chính xác của chương trình - mỗi khi bạn có khóa bị khóa, một số luồng sẽ chờ, không làm gì cả. – Borealid
@ Borealid .. thời điểm tôi đã xác định đồng bộ trong bất kỳ phương thức nào, toàn bộ đối tượng bị khóa khi tôi gọi phương thức đó .. tôi có đúng không? – JavaUser