当我将值放入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
。