gpt4 book ai didi

java - 线程中静态同步和非静态同步方法的行为差异

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:40 26 4
gpt4 key购买 nike

我理解 Class 对象上的静态同步锁和 Object 实例上的非静态锁。

但是在这个问题的公认答案中:Static versus non-static lock object in synchronized block

When you use a non-static lock object:

  • thread 1 calls o1.foo()
  • thread 2 calls o1.foo(), will have to wait for thread 1 to finish
  • thread 3 calls o2.foo(), it can just continue, not minding thread 1 and 2

为什么线程 3 可以在不考虑线程 1 和线程 2 的情况下继续运行。线程 3 不应该等待从线程 1 或线程 2 获取对象实例“this”的锁才能继续吗?

最佳答案

Why can Thread 3 just continue without regarding thread 1 and 2.

因为它锁定了不同的对象。

(除非 o1o2 碰巧指的是同一个对象....)

Shouldnt Thread 3 have to wait to acquire the lock on the Object instance 'this' from either thread 1 or 2 before it can proceed ?

没有。这些调用尝试分别在 o1o2 上同步(即锁定)。当 foo() 方法调用开始时,这些将成为相应线程的 this。在调用上下文中,各个线程的 this 不相关。

关于java - 线程中静态同步和非静态同步方法的行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110914/

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