我在阅读Java的集合相关内容时看到了这句话:
"所有的集合类都不是同步的,但是你将会看到,在本章后面,我们可以获得同步版本。"
有人能告诉我在Java中同步和非同步集合之间的区别是什么吗?
我在阅读Java的集合相关内容时看到了这句话:
"所有的集合类都不是同步的,但是你将会看到,在本章后面,我们可以获得同步版本。"
有人能告诉我在Java中同步和非同步集合之间的区别是什么吗?
在同步中,如果我们正在执行某些操作,则需要等待其完成后才能转移到另一个任务。
默认情况下,集合类不会同步。集合对象是可变的,这意味着一旦创建了该对象并且该对象同时调用两个线程,但一个线程正在更改对象的值,则可能会受到另一个对象的影响。因此,它不是线程安全的。
我们可以使用静态方法java.util.Collections.synchronizedCollection(Collection<T> c)明确同步集合。
同步集合意味着该类是线程安全的。(你可以有非同步集合也是线程安全的,但这是另一个话题,需要写上一千篇论文才能说明。)
集合通过获取锁来同步修改,以确保其他线程不会破坏状态。
基本上,除非你有多个线程,否则使用非同步版本。
(如果你不知道,线程本质上是程序中的执行线路。一些程序有多个线程,共享相同的代码和内存。)
默认情况下,集合类不是同步的。但如果您想要同步的集合,可以使用静态方法 java.util.Collections.synchronizedCollection(Collection<T> c)
。它将创建一个包装器,覆盖您的集合对象。因此,实际上,您的集合对象不会被同步,但您将通过包装器对象中的同步方法访问您的对象方法。
非同步 - 它不是线程安全的,不能在多个线程之间共享,除非有适当的同步代码。 而同步 - 它是线程安全的,并且可以与许多线程共享。