Запрет доступа к объекту, если он обновляется

Хотите знать, если кто-нибудь может помочь с этим сценарием -

У меня есть класс (Процессор), который я настраиваю, используя свойства 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);
    }
}

Любая помощь или указатели высоко ценится!

0 ответов

Другие вопросы по тегам