Scala 中的 synchronized 方法调用:三种写法的本质与区别-java教程

scala 的 `synchronized` 并非关键字,而是 `anyref` 类定义的普通方法,支持点号调用、中缀调用和作用于 `this` 的隐式调用,三者语义一致但锁对象不同——关键在于调用主体(即锁实例)的选择。

在 Scala 中,synchronized 是 AnyRef(即 Java Object 的别名)上的一个实例方法,其签名等价于:

final def synchronized[T](body: => T): T

这意味着它必须被某个对象调用,而该对象本身即为同步所依赖的监视器锁(monitor lock)。因此,所谓“不同用法”,本质是调用主体不同,而非语法糖差异。下面逐一解析常见写法:

✅ 1. 隐式锁:synchronized { … }(等价于 this.synchronized { … })

这是最简写法,省略了调用者,默认以当前对象(this)为锁:

class Counter {
  private var count = 0
  def increment(): Unit = synchronized { count += 1 } // 锁住 this
}

⚠️ 注意:若多个线程操作同一个实例,此方式有效;但若并发访问不同实例,则互不阻塞——因为锁对象不同。

✅ 2. 显式对象锁:lock.synchronized { … }(推荐)

显式创建专用锁对象,避免污染业务对象语义,提升可读性与安全性:

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » Scala 中的 synchronized 方法调用:三种写法的本质与区别-java教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4006507+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4006507+
  • 本周更新: 0+
  • 最后更新: 2026-03-16