谁能解释什么是 Java 集合框架中的非同步和同步访问?
原文由 unknownsatan 发布,翻译遵循 CC BY-SA 4.0 许可协议
谁能解释什么是 Java 集合框架中的非同步和同步访问?
原文由 unknownsatan 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答1.5k 阅读✓ 已解决
4 回答1.3k 阅读✓ 已解决
1 回答2.6k 阅读✓ 已解决
2 回答749 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
同步与非同步访问与 Java Collections Framework 无关。
同步访问意味着您有 某种锁定 来访问数据。这可以通过使用
synchronized
关键字或通过使用java.util.concurrent
包中的一些更高级别的构造来引入。非同步访问意味着您在访问数据时 不 涉及任何锁定。
如果您在多个线程中使用集合,您最好确保以同步方式访问它,或者集合本身是 线程安全 的,即在内部处理此类锁定。
为了确保以同步方式访问对某些集合的所有访问
coll
,您可以synchronized (coll) { ... }
Collections.synchronizedCollections
封装它在前一种方法中,您需要确保对集合的 每次访问 都包含在
synchronized
中。在后一种方法中,您需要确保 每个引用都 指向集合的同步版本。然而,正如@Fatal 所指出的,您应该了解后一种方法只会将线程不安全集合转换为线程安全集合。这通常不足以确保 您 正在编写的类是线程安全的。有关示例,请参阅@Fatals 评论。