请注意,FIFO排序必须适用于特定的内部
  这些方法中的执行点。


来自doc

它们对内部执行点意味着什么?

最佳答案

该文档随后立即说:


  因此,一个线程有可能在另一个线程之前调用获取,而在另一个线程之后到达排序点


这意味着这种情况是可能的:

thread 1                 thread 2
--------                 --------
calls acquire()
                         calls acquire()
                         acquire() does its job
acquire() does its job


(其中acquires() does its job是文档所指的“订购点”)

简而言之:无法保证及时调用第一个调用acquire()的线程先获取信号量。可以保证的是,当它从acquire()返回时,其他acquire()调用方将不得不等待。

这是极少数情况,但有可能发生。

关于java - 关于信号量类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16864641/

10-11 20:53