1

java中的 Synchronized 关键字是依赖于 Mutex 还是 Semaphore ?我读到这两个术语可以互换使用,但是有区别吗?java中是否有任何内置的信号量类?

4

3 回答 3

1

mutexa和 a之间的主要区别在于semaphore,它mutex只能由持有它的进程/线程semaphore释放,而它可能由任何进程/线程释放。还有一个区别但不那么重要:有一种称为计数信号量的信号量,即可以初始化为允许多个并发“持有者”的信号量。

Java 中的synchronized访问在语义上应该使用mutex.

于 2012-10-12T21:14:15.660 回答
0

Semaphore 有固定数量的许可,可以在运行代码块时获取/释放。因此,与许可数相等的固定线程数可以同时运行一个代码块。Mutex/Lock 是 Semaphore 的特殊版本,其中允许的数量为 1。即只允许单个线程运行某个代码块。这给了代码块的线程“所有权”。只有所有者才能获取和释放代码块上的锁。

于 2012-10-13T14:37:57.757 回答
0

同步是根据线程监视器实现的

java.util.concurrent.locks是一个包,其中包含一些有用的锁相关类,如ReentrantLock

于 2012-10-12T21:14:49.343 回答