将Context.MODE_MULTI_PROCESS提供给getSharedPreferences()是否使共享首选项线程安全?

时间:2013-03-08 09:09:04

标签: android multithreading thread-safety sharedpreferences

SharedPreferences不是线程安全的,正如Android docs中明确指出的那样:

  

注意:目前此类不支持跨多个使用   流程。这将在稍后添加。

但是,我有一个应用程序可以激活另外六个java.util.Threads commit()到共享的首选项,它们可能同时被解雇(尽管它们不太可能全部被解雇) 。这就是为什么我总是以这种方式从每个线程中获得对共享首选项的引用:

SharedPreferences prefs = getSharedPreferences(This.PREFS, Context.MODE_MULTI_PROCESS);
但是,我不确定这是否会使共享的prefs引用成为线程安全的。

例如,当六个线程中的两个被触发并同时调用commit()时,其中一个线程会等到另一个线程完成提交,然后继续提交自己的更改,还是不会完全承诺? commit() documentation中的以下一行对我来说听起来不太清楚:

  

请注意,当两个编辑器同时修改首选项时,最后一个调用commit将获胜。

" win"这意味着什么为什么它突然成为一场比赛"两个线程之间?

ADD 3/11/2013:每个线程修改共享首选项中的不同条目 - 它们不会修改相同的键值条目。

1 个答案:

答案 0 :(得分:0)

根据这个答案,共享首选项是线程安全的。 Android文档所说的是,它们不是多进程安全

https://stackoverflow.com/a/4695567/855680