java中的 Synchronized 关键字是依赖于 Mutex 还是 Semaphore ?我读到这两个术语可以互换使用,但是有区别吗?java中是否有任何内置的信号量类?
问问题
1542 次
3 回答
1
mutex
a和 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 回答