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) –