2
以下两个方法定义在语义上是否相同?为什么?为什么不?同步方法和信号量的语义等价(1,true)?
版本A:
private static synchronized void foo() {
bar();
}
版本B:
private static Semaphore available = new Semaphore(1, true);
private static void foo() {
available.acquire();
try {
bar();
}
finally {
available.release();
}
}
此外,信号量可能会从另一个线程释放,而不是获取它。 (请参阅[Semaphore](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html)javadocs) –