Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.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_Preferences - Fatal编程技术网

当我将值放入Java首选项时,它会自动刷新吗?

当我将值放入Java首选项时,它会自动刷新吗?,java,preferences,Java,Preferences,我正在使用java.util.prefs.Preferences存储我的应用程序设置。这是我的示例代码- private static final Preferences mPreferences = Preferences.userRoot().node("lab_exam"); public static void setDefaultPath(java.nio.file.Path v) { mPreferences.put(DEFAULT_PATH, v.toSt

我正在使用
java.util.prefs.Preferences
存储我的应用程序设置。这是我的示例代码-

private static final Preferences mPreferences
        = Preferences.userRoot().node("lab_exam");

public static void setDefaultPath(java.nio.file.Path v)
{
    mPreferences.put(DEFAULT_PATH, v.toString());
    flush();
}

public static void flush()
{
    try {
        mPreferences.flush();
    }
    catch (BackingStoreException ex) {
        Logger.getLogger(AppSettings.class.getName()).log(Level.SEVERE, null, ex);
    }
}
每次输入新值时,我都刷新mPreference,以确保成功保存数据。现在我的问题是,
Preference
是在每次我放东西时自动刷新,还是在做正确的事情

来自以下的Javadoc:

所有修改首选项数据的方法都允许异步操作;它们可能会立即返回,并且更改最终将以依赖于实现的延迟传播到持久备份存储。刷新方法可用于同步强制更新备份存储。Java虚拟机的正常终止不会导致挂起的更新丢失——终止时不需要显式刷新调用来确保挂起的更新保持不变


因此,如果您想防止VM异常终止时丢失,请使用
flush()
,否则不需要。请注意,每次更改后的刷新可能会降低性能,但一般来说,我不希望您经常更新首选项,以使其成为一个问题。

就我个人而言,我从未使用过
flush
,但这可能取决于底层实现,因此不需要使用flush。但有一件事困扰着我。它说:“更改最终将以依赖于实现的延迟传播到持久性备份存储。”这个延迟有多长?如果我需要在短时间内存储的新数据,我应该考虑它吗?@ SudiptoChorda,延迟的长度是依赖于实现的。您可以找出特定实现的延迟,但是编写依赖于实现的代码通常不是一个好主意。如果希望更好地保证数据何时刷新,那么可以使用
java.util.Timer
ScheduledExecutorService