在操作系统中,Semaphore是一种基本的同步模式。因此,对于并发性,我们要么使用Semaphore,要么使用Mutex。
但是,在Java中,我在“Concurrent Programming in Java by Doug Lea”一书中读到,基本的同步模式是为每个对象实现的Monitor (Lock and WaitSet)。只是在Java5中添加了Semaphores (以及Locks和其他并发类)。
那么,这个Semaphore与操作系统(比如Semaphore of PThread库)提供的那个有什么不同呢?
java是否使用OS信号量来实现其对象监视器?
发布于 2014-11-20 16:04:00
线程和Java锁之间的主要区别是,Java的对应方是重入。这意味着,在Java中,如果您获得了已经获得的锁,则不会发生死锁(请注意,p线程也可能具有可重入实现)。
注意,Java类的现代实现(以及来自Semaphore包的其他类)直接使用比较和交换等CPU指令,而不是操作系统提供的系统调用(如果硬件不支持,则使用类似的指令)。
发布于 2014-11-20 21:09:13
只有在Java 5中才添加信号量.
信号量是一个非常古老的概念。有很多老代码和老算法使用信号量。如果您想将一些旧代码移植到Java,可以使用java.util.concurrent.Semaphore而不是编写自己的代码。
我只是在这里猜测,但我敢打赌,这是他们将Semaphore添加到库中的主要原因。
https://stackoverflow.com/questions/27043567
复制相似问题