关于Java Collections Framework中的不同步和同步访问?

unk*_*tan 16 java

任何人都可以在Java Collections Framework中解释什么是不同步和同步访问?

aio*_*obe 16

同步与非同步访问与每次查看的Java集合框架无关.

同步访问意味着您可以使用某种锁定来访问数据.这可以通过使用synchronized关键字或使用包中的一些更高级别的构造来引入java.util.concurrent.

非同步访问意味着访问数据时涉及任何锁定.

如果您在多个线程中使用集合,则最好确保以同步方式访问它,或者集合本身是线程安全的,即在内部处理此类锁定.

要确保coll以同步方式访问某些集合的所有访问,您可以

在前一种方法中,您需要确保对集合的每次访问都包含在内synchronized.在后一种方法中,您需要确保集合的同步版本中的每个参考点.

正如@Fatal所指出的那样,您应该理解后一种方法只将线程不安全集合转换为线程安全集合.这通常不足以确保编写的类是线程安全的.有关示例,请参阅@Fatals注释.


Chr*_*utz 5

同步访问意味着它是线程安全的.因此,不同的线程可以同时访问集合而没有任何问题,但根据您正在做的事情,它可能会慢一点.

不同步是相反的.不是线程安全的,但速度要快一点.