代码之家  ›  专栏  ›  技术社区  ›  Bass

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

  •  1
  • Bass  · 技术社区  · 7 年前

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

    爪哇文档 ( flush() ):

    实现可以随时将更改刷新到持久性存储中。它们不需要等待调用此方法。

    当刷新在新创建的节点上发生时,它将被持久化,所有尚未持久化的祖先(和子代)也是如此。但是请注意,祖先中的任何偏好值更改都不能保证是持久的。

    removeNode() 方法, flushSpi()

    sync() :

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

    java.util.prefs.FileSystemPreferences java.util.prefs.WindowsPreferences , 刷新() 仅仅调用 同步() ,就这样。

    与其他人打交道时 java.util.prefs 实现(如果遵循规范):

    • 刷新() ,但不是 同步() ?
    • 另外,我的理解正确吗 同步() 刷新()
    2 回复  |  直到 7 年前
        1
  •  1
  •   Arpit Sharma    7 年前

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

    flush() 用于同步执行修改,即通过阻止执行。

    sync() 用于提交所有本应异步进行的挂起修改。换句话说,sync()将

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

        2
  •  1
  •   DHARMENDRA SINGH    7 年前
    flush()
    

    Flush基本上执行写操作对首选项节点的任何更改以备份存储,包括所有子节点上的数据。

    sync()
    

    Sync() 阻止执行,所以使用 flush() 方法来避免未保存的数据。

    推荐文章