java - 线程互斥段

标签 java multithreading concurrency

你好,我刚刚接受了电话采访,我无法回答这个问题,我想知道答案,我相信,最好是联系你不知道的答案。请鼓励我理解这个概念。

他的问题是:

“同步块(synchronized block)一次只允许一个线程进入互斥段。 当一个线程退出synchronized block 时,synchronized block 没有指定 接下来允许哪个等待线程进入互斥部分? 使用 Object 中可用的 synchronized 和方法,你能实现先到先得, 先发互斥节?一种保证让线程进入 互斥段按到达顺序? "

 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() 的调用者收到中断异常的情况!)

关于java - 线程互斥段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541957/

相关文章:

java - Tomcat:无法访问使用 ANT 部署的 war

java - Spring Boot 数据源设置

linux线程, sleep 在主要

java - 当线程(不是我开始的)结束时如何通知我?

mysql - MySQL中的多线程?

java - `ConcurrentHashMap`迭代器的多线程使用

java - 设置 JNI 和子进程内存限制

java - Java Web应用程序框架

c++ - 杀死正在运行的线程

c++ - 是否可以多线程同时执行非void函数? (C++)