你好,我刚刚接受了电话采访,我无法回答这个问题,我想知道答案,我相信,最好是联系你不知道的答案。请鼓励我理解这个概念。
他的问题是:
“同步块(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/