【发布时间】:2020-06-30 20:04:44
【问题描述】:
我最近询问了 Java 中的同步方法是否共享同一个锁键。答案是肯定的。但我的下一个想法是,这种模式非常严格,可能会导致不必要的延迟。例如,假设我们有 2 个同步方法,每个方法处理不同且独立的共享变量。如果一个变量的处理不影响另一个变量,那么同时锁定这两种方法有什么意义?有没有办法处理这种情况?
【问题讨论】:
-
肯定有。方法不止一种。屏幕右侧的“相关”块包含几篇解决这些问题的帖子。
-
您的问题是关于锁定的粒度——任何给定的锁定保护了多少或多少数据。好消息是,粒度完全由您在编写程序时决定。您可以根据自己的目的使用尽可能多或尽可能少的不同锁定对象来保护您的数据。
-
Re,“锁定这两种方法有什么意义......?”不要考虑“锁定方法”。方法永远不需要被锁保护。 数据需要被锁保护。每当两个或多个线程可以同时访问相同的数据,并且其中至少有一个要更改数据时,那么数据可能应该被锁保护。
标签: java concurrency synchronized