Java 如果对象正在更新,则阻止访问该对象
想知道是否有人能帮助解决这个问题- 我有一个类(处理器),我使用Netflix的Archaius属性配置它,它是ElasticSearch Java BulkProcessor的简单包装器。我还将一些回调连接到属性,因此如果值发生更改,BulkProcessor属性也应该得到更新。我的问题是,BulkProcessor是不可变的,更新属性的唯一方法是关闭一个实例并创建一个新实例。在调用回调时,我不想从我的类中调用任何方法——有没有办法用Java实现这一点 编辑:虽然我可以更新配置文件并重新启动服务,但我试图避免这种情况 我目前的想法是使用AtomicBoolean来指示类是否正在更新-如果为true,则阻止对该类的访问,这似乎不是很有效-Java 如果对象正在更新,则阻止访问该对象,java,elasticsearch,netflix-archaius,Java,elasticsearch,Netflix Archaius,想知道是否有人能帮助解决这个问题- 我有一个类(处理器),我使用Netflix的Archaius属性配置它,它是ElasticSearch Java BulkProcessor的简单包装器。我还将一些回调连接到属性,因此如果值发生更改,BulkProcessor属性也应该得到更新。我的问题是,BulkProcessor是不可变的,更新属性的唯一方法是关闭一个实例并创建一个新实例。在调用回调时,我不想从我的类中调用任何方法——有没有办法用Java实现这一点 编辑:虽然我可以更新配置文件并重新启动服
// 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);
}
}
非常感谢任何帮助或指点