我想要List<T>一个实现作为一个属性,可以毫无疑问地使用线程安全。 像这样的东西: private List<T> _list; private List<T> MyT { get { // return a copy of _list; } set { _list = value; } } 似乎仍然需要返回一个集合的副本(克隆),所以如果我们迭代集合的地方,同时集合被设置,那么不会引发exception。 如何实现线程安全的集合属性?
查看SharedPreferences文档,它说: “注意:目前这个类不支持在多个进程中使用,这个将在稍后添加。” 所以它本身并不是线程安全的。 但是,对commit()和apply()做了什么样的保证呢? 例如: synchronized(uniqueIdLock){ uniqueId = sharedPreferences.getInt("UNIQUE_INCREMENTING_ID", 0); uniqueId++; sharedPreferences.edit().putInt("UNIQUE_INCREMENTING_ID", uniqueId).commit(); } 在这种情况下,uniqueId总是唯一吗? 如果没有,是否有一个更好的方法来跟踪一个持续的应用程序的唯一ID?