Dan*_*iel 16 java concurrency multithreading
您好,我刚刚接受电话采访我无法回答这个问题,我想知道答案,我相信,建议找到您不知道的答案.请鼓励我理解这个概念.
他的问题是:
"synchronized块只允许一个线程一次进入互斥段.当一个线程退出synchronized块时,synchronized块没有指定哪个等待线程接下来会进入互斥段?使用synchronized和方法在Object中,你能实现先到先得的互斥部分吗?保证线程按到达顺序进入互斥部分?
 public class Test {
   public static final Object obj = new Object();
   public void doSomething() {
     synchronized (obj) {
          // mutual exclusive section
     }
   }
 }
这是一个简单的例子:
public class FairLock {
    private int _nextNumber;
    private int _curNumber;
    public synchronized void lock() throws InterruptedException {
        int myNumber = _nextNumber++;
        while(myNumber != _curNumber) {
            wait();
        }
    }
    public synchronized void unlock() {
        _curNumber++;
        notifyAll();
    }
}
你会像以下一样使用它:
public class Example {
  private final FairLock _lock = new FairLock();
  public void doSomething() {
    _lock.lock();
    try {
      // do something mutually exclusive here ...
    } finally {
      _lock.unlock();
    }
  }
}
(注意,这不能处理lock()调用者收到中断异常的情况!)