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
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的例子:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
你会像以下一样使用它:
public class Example {
private final FairLock _lock = new FairLock();
public void doSomething() {
_lock.lock();
try {
// do something mutually exclusive here ...
} finally {
_lock.unlock();
}
}
}
Run Code Online (Sandbox Code Playgroud)
(注意,这不能处理lock()调用者收到中断异常的情况!)