java - "A synchronized block in Java is synchronized on some object"是什么意思..?

标签 java multithreading synchronized

我知道为了实现线程安全和同步,我们使用同步块(synchronized block)或方法。
但我无法理解这个说法-
“Java 中的同步块(synchronized block)在某个对象上同步

任何现实世界的例子都会有帮助。

最佳答案

synchronized的作用是一次只有一个线程可以执行同步代码。但如果我们看看细节,就会发现事实并非如此。

假设我们有两个 vector AB并且想要从不同的线程调用各种方法。 Vector 类通过同步所有重要方法来实现线程安全。当线程 T1 执行 A.add(5,"abc") 时,为什么会阻止另一个线程执行 B.get(5)?它们没有共同的数据元素,因此并行执行两个调用不会有什么坏处。

这里出现了“在 A 上同步”的概念:Vector 方法在 Vector 实例上同步,因此最多有一个线程可以执行同步代码对于任何给定的 vector

因此, vector A 在 A 上同步, vector B 在 B 上同步。因此,没有两个线程可以并行操作 vector A,但一个线程可以在 A 上工作,而另一个线程可以独立地在 B 上工作。

  • 使用 synchronized(object) { ... } 构造,您可以决定要同步的对象。
  • 在实例方法上使用 synchronized 关键字,您可以在当前 (this) 对象上获得同步,因此每个实例都会获得自己的同步。
  • 在静态方法上使用 synchronized 关键字,您可以在类上获得同步,这样您就可以获得针对此类的所有其他 static Synchronized 方法的保护,而与任何其他方法无关。实例。

关于java - "A synchronized block in Java is synchronized on some object"是什么意思..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52678805/

相关文章:

java - 多线程数组内容?

java - 在Eclipse中Java开发的上下文中,术语 'headless'是什么意思?

java - 如何下载 Netbeans 6.9 IDE 的源代码

java - Spring @PropertySource 刷新

.net - .NET 中工作线程和 I/O 线程的简单描述

c# - 网络摄像头时间不准确,设置曝光时间

java - 构造函数是否同步直至完全完成?

java - 误用同步?

java - java中默认可以并发执行实例方法吗?

java - maven junit 4.5 中没有 org.junit.test 包