代码之家  ›  专栏  ›  技术社区  ›  YK S

Java中的内在锁与同步

  •  0
  • YK S  · 技术社区  · 6 年前

    根据Oracle文档 Intrinsic Locks and Synchronization :

    内部锁在同步的两个方面都起作用: 强制对对象状态的独占访问并建立 发生在对可视性至关重要的关系之前。

    我的问题是:

    什么? 发生在关系之前 这里的意思是在同步上下文中?这是否意味着一旦一个线程执行了一个同步块,在其他线程到来并重新获取锁之前,所有更改都将刷新到主内存中?

    另外,我还有一个问题:

    假设 线程1 已获取锁并正在执行同步块。

    是否有可能 JVM/线程调度程序 迫使 线程1 对另一个州说 等待 这样它就会释放锁,另一个线程会说 线程2 会获得锁吗?现在过了一段时间,线程1可以再次进入 运行状态 从锁掉的地方开始。

    1 回复  |  直到 6 年前
        1
  •  1
  •   xingbin    6 年前

    在这里,关系之前发生的事情意味着同步 语境?

    这段关系只是 guarantee 一个特定语句写入的内存对另一个特定语句可见。在这种情况下,这意味着当您在同步块中写入某些内容时,进入同步块的其他线程将注意到这种更改。

    jvm/thread scheduler是否可以强制thread1 另一个状态是等待,这样它将释放锁和另一个 线程说线程2将获得锁?

    不,而线程可以通过调用 wait .