2014-10-19 23 views
1

我真的很困惑为什么这个功能需要java。请在公平模式下使用ex:ReentrantLock, ReadWriteLock, Semaphore时分享一些实例。何时在Java并发中使用公平模式?

+4

*“如果设置为true,则在争用情况下,锁定允许授予对最长等待线程的访问权限。”* [Source](http://docs.oracle.com/javase/7/docs/api/java/util /concurrent/locks/ReentrantLock.html)什么不清楚? – 2014-10-19 21:26:44

+1

转到邮局或超市,并建议邮递员或收银员先为队列中的最后一个人服务。你会明白为什么公平是重要的。 – 2014-10-19 21:39:40

+0

其实我知道这个功能是如何工作的。主要问题是何时使用这个。我没有发现这个东西的有价值的例子。我想从真实项目中找到一些例子。谢谢! – fashuser 2014-10-20 18:55:49

回答

1

当您遇到需要更好地表示订单的情况时,公平性很有用。我使用一个公平的锁的情况下,在一个日志队列(不,我不能使用log4j或其他),并且我想要并发性,同时仍然管理以类似于它到达的顺序。

我本来可以使用一个并发队列,但还有其他因素在起作用,并且在线程级别上的锁定比拥有一个队列要好,因为线程可能会在轮到他们之前添加多个值再次。这很复杂......但是,增加一个公平的锁允许项目按照代表性的顺序进行。

实际上,将公平锁看作线程的到达顺序队列是很有用的,线程不能只是放弃它们的负载并离开,而是做其他事情,比如并发队列。在这里你排队的线程,而不是工作量。

请注意,订单不能保证,但大部分订单与订单无法区分。