gpt4 book ai didi

java - 同步方法和 Semaphore(1, true) 的语义等价吗?

转载 作者:行者123 更新时间:2023-12-02 03:58:29 26 4
gpt4 key购买 nike

以下两个方法定义在语义上是否等效?为什么?为什么不呢?

版本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.acquire 中阻塞的线程可能会被中断,从而导致抛出 InterruptedException。您的代码不会按原样编译:您必须以某种方式处理此异常,而不必使用同步。

关于java - 同步方法和 Semaphore(1, true) 的语义等价吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7640901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com