java - 大小为 1 的信号量是最佳选择吗?

标签 java multithreading locking semaphore java.util.concurrent

如果您的资源一次只能访问一次,您可以使用大小为 1 的信号量,还是可以只使用一个 ReentrantLock 实例?

使一个或另一个成为更好的决定的细微差别是什么?

最佳答案

有区别:

  1. 信号量可以由一个线程获取并由另一个线程释放。这样,一个线程可以向另一个线程发送信号。计数为 1 的信号量也可用于互斥。另一方面,锁仅用于互斥。
  2. 信号量不可重入。这意味着当许可耗尽时,线程无法获取信号量,即使它已被同一线程获取。锁可以重入。

关于java - 大小为 1 的信号量是最佳选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15679074/

相关文章:

java - PagedResources<Resource 和 RestTemplate 不起作用

java - 使用 GStreamer 创建 AVI 文件

c# - 在多线程环境中创建实例

c++ - 是否有必要锁定一个*仅从一个线程写入*而*仅从*另一个线程读取的数组?

java - 如何解决 Java 中的 "Double-Checked Locking is Broken"声明?

python - 为什么 Python/Django 不会在 Mysql : ERROR 1205 (HY000): Lock wait timeout exceeded 上引发异常

java - 如何查找数字、字母和 $ _ # 以外的字符?

java - Assert.assertEquals(object 1, object2) 如何比较两个对象?

php - 如何在 eloquent 中执行依赖于表最后一行的更新和保存操作?

Java TimerTask 应该等待阻塞队列