Tôi có một ứng dụng cứ 15 phút một lần để sao chép từ cơ sở dữ liệu từ xa. Nó chỉ giữ hai kho lưu trữ đồng bộ. Một khi sao chép này là đi nó không thể làm điều đó một lần nữa. Tôi đã thiết lập cấu trúc sau nhưng tôi không chắc đó có phải là cách tiếp cận chính xác hay không.Cách khóa một phương thức java để bảo vệ nhiều lời gọi
public class ReplicatorRunner {
private static Lock lock = new ReentrantLock();
public replicate() {
if (lock.tryLock()) {
try {
// long running process
} catch (Exception e) {
} finally {
lock.unlock();
}
} else {
throw new IllegalStateException("already replicating");
}
}
}
public class ReplicatorRunnerInvocator {
public void someMethod() {
try {
ReplicatorRunner replicator = new ReplicatorRunner();
replicator.replicate();
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}
Các ReplicatorRunner
là lớp sở hữu phương pháp replicate
mà chỉ có thể chạy cùng một lúc.
Chỉnh sửa. Tôi cần cuộc gọi tiếp theo thất bại (không chặn) nếu phương thức đã chạy trên bất kỳ phiên bản nào.
Có một câu hỏi ở đây nơi nào đó? – shoosh
Yeap, trong tiêu đề ... dude, tôi không có thời gian để giúp bạn hoàn toàn nhưng kiểm tra từ khóa được đồng bộ ... –
Đồng bộ hóa trên mỗi trường hợp hoặc mỗi lớp (nếu nó là tĩnh) và khối. Tôi muốn nó thất bại và không chặn. – rmarimon