【问题标题】:How to best interpret synchronized(this) keyword in Java?如何最好地解释 Java 中的 synchronized(this) 关键字?
【发布时间】:2020-03-31 20:14:23
【问题描述】:

只是想知道如何最好地解释 Java 中的 synchronized 关键字? 我知道它的作用(简单地说),它使用每个对象都具有的锁对象锁定多个线程访问的关键部分。那么我可以将synchronized(this) 解释为一个方法调用,其中synchronized 的返回值就是这个锁对象吗?

【问题讨论】:

标签: java concurrency synchronized


【解决方案1】:

synchronized 不返回任何值。 synchronized(this) 锁定this 实例,即锁定对象为this

请注意,锁定this 被认为是一种不好的编码习惯。

【讨论】:

  • 来自 Java 文档的“计算引用...”在我看来确实像是返回了一些东西,只是不在客户端级别。
  • 我不知道“在客户端级别”是什么意思。在任何情况下 synchronized() 都不是一个函数,它是一个关键字,不,它不返回任何东西。
【解决方案2】:

想象this 是一把钥匙,而同步块是一个旅馆房间。当你拿到钥匙后,房间就是你的了,其他人无法进入。当你把钥匙还给别人时,其他人可以再次拿到钥匙进入房间。

synchronized 本身不返回任何内容。这只是一种使用 locks 来同步线程的语法。

在我们的示例中,线程是客人,同步块是旅馆房间,锁是房间的钥匙。任何对象都可以是锁,this 是一个对象。

【讨论】:

  • 现在有趣的是知道“使用锁同步线程”在内部是如何工作的。
  • @TMOTTM 您可以检查任何开源 JVM 的内部结构。无论如何,现代操作系统已经为此提供了 API。
猜你喜欢
  • 1970-01-01
  • 2011-01-06
  • 2014-12-03
  • 1970-01-01
  • 2014-04-10
  • 2011-04-03
  • 1970-01-01
  • 2011-09-22
  • 1970-01-01
相关资源
最近更新 更多