Java 如何知道显式锁是否成功提供了内存可见性?

Java 如何知道显式锁是否成功提供了内存可见性?,java,multithreading,concurrency,Java,Multithreading,Concurrency,这是从internet某处复制的代码: 此显式锁如何工作? public class Lock { private Object lockObj = new Object(); private Thread owner; private int lockCount; /** * Waits for up to 'maxWait' milliseconds to acquire the lock, * and returns true if the lock was

这是从internet某处复制的代码:
此显式锁如何工作?

public class Lock {
  private Object lockObj = new Object();
  private Thread owner;
  private int lockCount;

  /**
   * Waits for up to 'maxWait' milliseconds to acquire the lock,
   * and returns true if the lock was acquired.
   **/
  public boolean acquireLock(int maxWait) throws InterruptedException {
    Thread currentThread = Thread.currentThread();
    synchronized (lockObj) {
      if (owner == currentThread) {
        lockCount++;
        return true;
      }
      long waitedSoFar = 0L;
      while (owner != null) {
        long t0 = System.currentTimeMillis();
        long timeToWait = maxWait - waitedSoFar;
        if (timeToWait <= 0)
          return false;
        lockObj.wait(timeToWait);
        if (owner != null) {
          waitedSoFar += System.currentTimeMillis() - t0;
        }
      }
      owner = currentThread;
      lockCount = 1;
      return true;
    }
  }
  public void releaseLock() {
    Thread currentThread = Thread.currentThread();
    synchronized (lockObj) {
      if (owner == currentThread) {
        lockCount--;
        if (lockCount == 0) {
          owner = null;
          lockObj.notify();
        }
        return;
      } else {
        // Only the owner can release the lock!
        throw new IllegalStateException();
      }
    }
  }
}
公共类锁{
私有对象lockObj=新对象();
私有线程所有者;
私人内部锁计数;
/**
*最多等待“maxWait”毫秒以获取锁,
*如果获取了锁,则返回true。
**/
公共布尔acquireLock(int-maxWait)抛出InterruptedException{
Thread currentThread=Thread.currentThread();
已同步(lockObj){
如果(所有者==currentThread){
锁计数++;
返回true;
}
长等待时间=0升;
while(所有者!=null){
长t0=System.currentTimeMillis();
长时间等待=最大等待-等待时间;

如果(timeToWait没有cpu可以获取的同步监视器。监视器是在您正在编程的语言的运行时实现的结构,在本例中,是java

java运行时负责锁定并禁止其他代码进入同步代码块。cpu只看到处理它的指令


关于缓存问题:cpu不仅仅决定刷新缓存。缓存在被覆盖之前一直保持不变。

cpu无法获得同步监视器。监视器是在您正在编程的语言(在本例中为java)的运行时实现的结构

java运行时负责锁定并禁止其他代码进入同步代码块。cpu只看到处理它的指令


关于缓存问题:cpu不仅仅决定刷新缓存。缓存在被覆盖之前一直保持不变。

当同步方法退出时,它会自动与同一对象的同步方法的任何后续调用建立“发生在之前”关系。这保证了对stat的更改对象的e对所有线程都是可见的。之前发生的是在两个同步块之间。在显式锁的情况下,在释放锁和获取锁之间。而不是在获取锁和释放之间。关于内存可见性,您有很多问题,但您似乎不了解java同步的基础知识?我建议您这样做在提出这样的问题之前,先阅读基础知识,以便理解基础知识。当同步方法退出时,它会自动与同一对象的同步方法的任何后续调用建立“发生在之前”关系。这保证了对象状态的更改对所有线程都可见。Tha在两个同步块之间。在显式锁的情况下,在释放锁和获取锁之间。而不是在获取锁和释放之间。关于内存可见性,您有很多问题,但您似乎不了解java同步的基础知识?我建议您先读一读,以便了解在问这样的问题之前,先了解一些基本知识。