任何人都可以在Java Collections Framework中解释什么是不同步和同步访问?
aio*_*obe 16
同步与非同步访问与每次查看的Java集合框架无关.
同步访问意味着您可以使用某种锁定来访问数据.这可以通过使用synchronized关键字或使用包中的一些更高级别的构造来引入java.util.concurrent.
非同步访问意味着访问数据时不涉及任何锁定.
如果您在多个线程中使用集合,则最好确保以同步方式访问它,或者集合本身是线程安全的,即在内部处理此类锁定.
要确保coll以同步方式访问某些集合的所有访问,您可以
...环绕声访问 synchronized (coll) { ... }
public void someMethod() {
synchronized (coll) {
// do work...
}
}
Run Code Online (Sandbox Code Playgroud)...使用封装它 Collections.synchronizedCollections
coll = Collections.synchronizedCollection(coll);
Run Code Online (Sandbox Code Playgroud)在前一种方法中,您需要确保对集合的每次访问都包含在内synchronized.在后一种方法中,您需要确保集合的同步版本中的每个参考点.
正如@Fatal所指出的那样,您应该理解后一种方法只将线程不安全集合转换为线程安全集合.这通常不足以确保您编写的类是线程安全的.有关示例,请参阅@Fatals注释.
| 归档时间: |
|
| 查看次数: |
33496 次 |
| 最近记录: |