首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Preferences.flush()和Preferences.sync()有什么区别?

Preferences.flush()和Preferences.sync()有什么区别?
EN

Stack Overflow用户
提问于 2018-09-25 09:50:27
回答 2查看 378关注 0票数 1

Preferences.flush()Preferences.sync()有什么区别?

来自Javadoc (flush()):

强制将此首选项节点及其后代的任何内容更改到持久存储。一旦该方法成功返回,就可以安全地假设在方法调用之前根植于此节点的子树中所做的所有更改都是永久的。 实现可以随时将更改刷新到持久存储中。他们不需要等待这个方法被调用。 当刷新发生在新创建的节点上时,就会使其持久,任何尚未持久的祖先(和后代)也是如此。但是,请注意,祖先中的任何首选项值更改都不能保证持久不变。 如果在用removeNode()方法删除的节点上调用此方法,则在此节点上调用flushSpi(),而对其他节点调用。

sync()

确保将来从此首选项节点及其后代读取的内容反映在同步调用之前提交到持久存储的任何更改(来自任何VM)。副作用是,强制将此首选项节点及其后代的内容更改到持久存储区,就好像在此节点上调用了刷新方法一样。

看看java.util.prefs.FileSystemPreferencesjava.util.prefs.WindowsPreferences的实现,flush()只是调用sync(),仅此而已。

在处理其他java.util.prefs实现时(如果它们遵循规范):

  • 如果我只是flush(),而不是sync(),那么丢失未保存的数据(例如,在断电或异常JVM终止时)的可能性有多大?
  • 此外,我的理解是正确的吗,sync()保证更改对其他JVM是可见的,而flush()却不能?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-08 10:12:41

默认情况下,所有修改首选项的方法都是异步的,并保证最终的一致性。

flush()用于同步执行修改,即阻塞执行。

sync()用于提交应该异步发生的所有挂起的修改。换句话说,()将阻止执行,并在继续之前强制状态保持一致。

为了避免在异常终止的情况下丢失未保存的数据,您应该在任何地方使用刷新()。我不能评论这将如何影响您的代码的效率。

票数 1
EN

Stack Overflow用户

发布于 2018-10-09 11:45:23

代码语言:javascript
复制
flush()

刷新基本上执行写操作,对支持存储的首选项节点进行任何更改,包括所有子节点上的数据。

代码语言:javascript
复制
sync()

它确保内存中当前版本的首选项节点与存储版本匹配,并且基本上是Sync()阻止执行,因此使用flush()方法来避免未保存的数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52495268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档