2013-06-01 43 views
1

我发现在这个问题上非常相似,但是并没有完全回答我的问题。 java.util.concurrent.Sempaphore;带重载构造函数,它也采用公平性(boolean)参数,保证等待获取线程的FIFO? 在此先感谢。用信号量保证FIFO?

回答

2

它构建了一个等待线程队列来获取信号量。这使得它比较慢,但是将按照线程添加到队列的顺序给出许可证。

注意:由于可能出现在多个线程中的争用情况,您不能说尝试获取信号量的线程会先被添加到队列中,例如,如果它在尝试获取信号量和被添加到队列之间暂停。

+0

“注意:由于可能发生在多个线程中的竞态条件,您不能说尝试获取信号量的线程将首先添加到队列中,例如,如果它在尝试获取信号量和被添加之间暂停到队列。“因此,正确地同步捕获呼叫应该保证FIFO算法? – Rollerball

+0

我相信使用synchronized会混淆问题。你不应该编写需要保证公平的程序,而只需尽最大的努力。如果你想确保某些操作只以特定的顺序进行,你应该使用一个线程(即使这样,代码也可以重新排序;) –