繁体   English   中英

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

[英]What is the difference between synchronized and non-synchronized collection classes in Java?

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

“没有一个集合类是同步的,但是正如您将在本章后面看到的,可以获得同步版本。”

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

在同步中,如果我们正在执行某件事,那么我们需要等待它完成,然后再转移到另一个任务。

默认情况下不同步集合类。 集合对象是可变的,这意味着一旦创建对象并且该对象一次调用两个线程,但是一个线程正在更改对象的值,然后它可以受另一个对象的影响。 所以,它不是线程安全的。

我们可以使用静态方法java.util.Collections.synchronizedCollection(Collection<T> c)显式同步集合

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

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

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

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

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

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

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

非同步- 它不是线程安全的,如果没有适当的同步代码,就不能在多个线程之间共享。 虽然,同步- 它是线程安全的,可以与许多线程共享。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM