SharedPreferences
不是线程安全的,正如Android 文档中明确指出的那样:
注意:目前此类不支持跨多个进程使用。这将在稍后添加。
java.util.Threads
但是,我有一个应用程序可以触发其他六个commit()
共享首选项,并且它们可能会同时触发(尽管不太可能全部触发)。这就是为什么我总是以这种方式从每个线程中获取对我的共享首选项的引用:
SharedPreferences prefs = getSharedPreferences(This.PREFS, Context.MODE_MULTI_PROCESS);
但是,我不确定这是否使共享首选项引用线程安全。
例如,当六个线程中的两个同时被触发并调用commit()
时,其中一个线程会等到另一个完成提交后再继续提交自己的更改,还是完全不提交?commit()
文档中的以下行对我来说听起来不清楚:
请注意,当两个编辑器同时修改首选项时,最后一个调用 commit 的人获胜。
这里的“赢”是什么意思?为什么会突然变成两个线程之间的“较量”?
添加 3/11/2013:每个线程修改共享首选项中的不同条目——它们没有修改相同的键值条目。