根据针对Intrinsic Locks and Synchronization的Oracle文档:
内部锁在同步的两个方面都起作用: 强制对对象状态的独占访问并建立 发生在对可见度至关重要的关系之前。
我的问题是:
在同步上下文中,先于关系在这里意味着什么?这是否意味着一旦一个线程执行了一个同步块,所有更改将在其他线程出现并重新获得该锁之前被刷新到主存储器中?
我还有另一个问题:
假设 thread1 已获得锁定并正在执行同步块。
JVM /线程调度程序是否可以将 thread1 强制设置为另一个状态,例如 wait ,这样它将释放锁,而另一个线程说 thread2 将获得锁?现在一段时间后,thread1可以再次进入运行状态并从丢失锁的位置开始。
答案 0 :(得分:1)
发生什么事-关系在这里意味着同步 上下文?
这种关系只是一个guarantee,由一个特定语句写的内存对另一特定语句可见。在这种情况下,这意味着当您在同步块中写入某些内容时,其他进入同步块的线程将注意到此更改。
JVM /线程调度程序是否可能将thread1强制为 另一个州说,等待,这样它将释放锁,另一个州 线程说thread2将获得锁?
否,尽管线程可以通过调用wait
来释放锁。