Tôi có một thread an toàn container lớp:Java kết hợp ổ khóa rõ ràng với các phương pháp đồng bộ
public class Container {
private int x;
...
public synchronized int getX();
public synchronized void setX(int x);
}
Sau đó, tôi có một danh sách container:
List<Container> containers;
Tôi muốn lặp qua danh sách, aquire khóa của thùng chứa tại mỗi lần lặp và chỉ ở cuối vòng lặp, giải phóng tất cả các khóa. Something như thế này:
for(Container c : containers) {
c.lock();
//do stuff
}
for(Container c : containers)
c.unlock();
tôi vẫn muốn đề khác để có thể tiếp tục sử dụng GetX và setX phương pháp container mở khóa, nhưng vì nhiều lý do tôi không muốn để cho phép điều đó cho container đã phân tích.
Bạn có biết mã java cho điều đó không?
Ý tưởng hay hơn cũng được đánh giá cao.
Làm thế nào về việc có 'khóa() 'và' unlock() 'đầu tiên và cuối cùng trong' getX' và' setX'? – aioobe
@see [ReentrantLock] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantLock.html) –
@aioobe: Tôi muốn kết hợp các phương thức được đồng bộ hóa với ổ khóa (hy vọng rằng nó là possibile, nhưng tôi nghĩ rằng đó là bởi vì đằng sau hậu trường từ khóa đồng bộ mua lại khóa đối tượng). – Kami