gpt4 book ai didi

java - 同步语句,不清楚java doc示例

转载 作者:行者123 更新时间:2023-11-29 05:04:58 25 4
gpt4 key购买 nike

目前我正在尝试理解 Java 中的 synchronized 获取 this synchronized statements 下的 java doc 示例 带有类 MsLunch 和两个实例变量 c1 和 c2 的示例。

它指出:

Suppose, for example, class MsLunch has two instance fields, c1 and c2, that are never used together. All updates of these fields must be synchronized, but there's no reason to prevent an update of c1 from being interleaved with an update of c2 — and doing so reduces concurrency by creating unnecessary blocking.

对我来说,这听起来像 c1 和 c2 不允许一起使用。这就是为什么递增 c1 和 c2 的两个语句必须同步的原因。 但是为什么他们在下一句中说没有理由阻止 c1 的更新与 c2 的更新交错。这句话对我来说完全没有意义。首先,他们说它们没有一起使用,现在可以在递增 c1 的同时递增 c2

谁能详细解释一下这一段。

请记住,我的母语不是英语,理解这个问题实际上可能存在语言问题。

最佳答案

c1和c2是两个完全独立的计数器。一个线程应该能够增加 c1 而另一个线程增加 c2。如果您简单地同步了 inc1() 和 inc2() 方法,您将阻止线程 1 递增 c1 而线程 2 递增 c2(反之亦然)。这会对性能产生负面影响。因此,您使用两个单独的锁来同步每个增量。

例如,如果 c2 的值取决于 c1 的值,那么您将不得不使用单个锁来避免竞争条件。

关于java - 同步语句,不清楚java doc示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30663593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com