Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果对象正在更新,则阻止访问该对象_Java_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Netflix Archaius - Fatal编程技术网 elasticsearch,netflix-archaius,Java,elasticsearch,Netflix Archaius" /> elasticsearch,netflix-archaius,Java,elasticsearch,Netflix Archaius" />

Java 如果对象正在更新,则阻止访问该对象

Java 如果对象正在更新,则阻止访问该对象,java,elasticsearch,netflix-archaius,Java,elasticsearch,Netflix Archaius,想知道是否有人能帮助解决这个问题- 我有一个类(处理器),我使用Netflix的Archaius属性配置它,它是ElasticSearch Java BulkProcessor的简单包装器。我还将一些回调连接到属性,因此如果值发生更改,BulkProcessor属性也应该得到更新。我的问题是,BulkProcessor是不可变的,更新属性的唯一方法是关闭一个实例并创建一个新实例。在调用回调时,我不想从我的类中调用任何方法——有没有办法用Java实现这一点 编辑:虽然我可以更新配置文件并重新启动服

想知道是否有人能帮助解决这个问题-

我有一个类(处理器),我使用Netflix的Archaius属性配置它,它是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);
    }
}
非常感谢任何帮助或指点