Java中的同步和非同步集合类有什么区别?

时间:2014-02-02 06:43:11

标签: java

我正在阅读关于Java的集合,然后我读了这一行:

  

“没有任何集合类是同步的,但正如您将看到的那样   在本章后面,有可能获得同步   版本“。

有谁能告诉我Java中的同步和非同步集合有什么区别?

5 个答案:

答案 0 :(得分:3)

同步集合意味着该类是线程安全的。 (你可以拥有非同步的集合,这些集合也是线程安全的,但这是另一天上千篇论文的主题。)

集合通过获取锁来同步突变,以确保其他线程不会破坏状态。

基本上,使用非同步版本,除非您有多个线程。

(如果你不知道,一个线程本质上是一个程序中的执行线。一些程序有多个线程,都共享相同的代码和内存。)

答案 1 :(得分:3)

在同步中,如果我们正在执行某项操作,则需要等到它完成后再移到另一个任务。

集合类默认情况下不同步。集合对象是可变的,这意味着一旦创建了该对象,并且该对象一次调用了两个线程,但是一个线程正在更改该对象的值,则可以由另一个对象来实现。因此,它不是线程安全的。

我们可以使用静态方法 java.util.Collections.synchronizedCollection(Collection c)

显式同步收集

答案 2 :(得分:1)

默认情况下,集合类不会同步。但是,如果您想要同步集合,则可以使用静态方法java.util.Collections.synchronizedCollection(Collection<T> c)。它将在您的集合对象上创建包装器。实际上,您的集合对象不会被同步,但您将通过包装器对象中的synchronized方法访问对象的方法。

答案 3 :(得分:1)

基本上,同步意味着只有一个线程可以在任何给定时间访问该特定类的方法。 StringBuffer是同步类的一个示例。同步类是线程安全的类。

非同步意味着两个或更多线程可以在任何给定时间访问该特定类的方法。 StringBuilder是非同步类的示例。通常,非同步类不是线程安全的。 (但是某些非同步类是线程安全的)

答案 4 :(得分:0)

非同步 - 它不是线程安全的,如果没有正确的同步代码,就无法在多个线程之间共享。 而,  同步 - 它是线程安全的,可以与许多线程共享。

相关问题