gpt4 book ai didi

java - 同步(this)和同步(objectReference)之间的区别

转载 作者:行者123 更新时间:2023-12-01 15:17:54 24 4
gpt4 key购买 nike

我想更好地了解当线程进入 synchronized(this) block 与 synchronized(someObjectReference) block 时实际发生的机制。

    synchronized (this) {
// Statement 1
// Statement 2
}

synchronized (someObjectReference) {
// Statement 1
// Statement 2
}

据我了解:(我错过了什么吗?我错了吗?)

  • 在这两种情况下,一次只有 1 个线程可以访问同步块(synchronized block)
  • 当我们在 someObjectReference 上同步时:
    • 一次只能有 1 个线程可以访问/修改此 block 中的内容
    • 一次只能有 1 个线程进入该 block

还有哪些其他机制?

    synchronized (objectReference) {
// Statement 1 dealing with someObjectReference
// Statement 2 not dealing with someObjectReference
}

在上面的示例中,将不处理 mutex 的语句添加到同步块(synchronized block)中是否有意义?

最佳答案

只有将两者混合在一起时才会有区别。

synchronized(foo) 的单一基本规则synchronized(foo) 中只能有一个线程阻止相同的foo在任何给定时间。就是这样。(唯一值得一提的警告是,对于相同的 synchronized(foo) ,线程可以位于多个嵌套 foo block 内。)

如果某些代码位于 synchronized(foo) 内 block ,并且一些代码位于 synchronized(bar) 内 block ,那么这些代码片段可以同时运行——但是你不能让两个线程运行synchronized(foo)中的代码。同时阻止。

关于java - 同步(this)和同步(objectReference)之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11377501/

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