Запрет доступа к объекту, если он обновляется
Хотите знать, если кто-нибудь может помочь с этим сценарием -
У меня есть класс (Процессор), который я настраиваю, используя свойства Archaius Netflix, которые являются простой оболочкой для ElasticSearch Java BulkProcessor. Я также подключаю некоторые обратные вызовы к свойствам, поэтому, если значение изменяется, свойства BulkProcessor также должны обновляться. Моя проблема в том, что BulkProcessor является неизменяемым, и единственный способ обновить свойство - закрыть экземпляр и создать новый. Я не хочу, чтобы что-либо вызывало какой-либо метод из моего класса, пока вызывается обратный вызов - есть ли способ сделать это с помощью Java?
Изменить: хотя я мог обновить файлы конфигурации и перезапустить службу, я пытаюсь избежать этого.
В настоящее время я думал о том, чтобы использовать AtomicBoolean, чтобы указать, обновляется ли класс - если true, тогда доступ к классу заблокирован, что не очень эффективно -
// Processor.class
class Processor {
public Processor() {
this.bulkProcessor = /** BulkProcessor setup **/
this.updating = new AtomicBoolean(false);
}
public void add(Object payload) {
while (updating.get()) {
// Do something here to prevent access when updating
}
bulkProcessor.add(payload);
}
/** The callback method used by Dynamic*Property **/
public void update() {
updating.set(true);
bulkProcessor.awaitClose(30L, TimeUnit.SECONDS);
bulkProcessor = /** BulkProcessor setup **/
updating.set(false);
}
}
Любая помощь или указатели высоко ценится!