带锁的Java多线程同步

时间:2016-04-24 06:52:35

标签: java multithreading

在Java中,我们可以通过使用Lock接口和ReentrantLock类来实现公平性,如下所示:

Lock lock=new ReentrantLock(true);

一旦我们实现了公平性,那么在多个线程等待访问锁的情况下,等待最多持续时间的线程将被授予锁定权限。

任何人都可以提供JVM如何保持线程等待很长时间的详细信息,即JVM如何实现公平性。

1 个答案:

答案 0 :(得分:1)

详细信息在源代码中。源代码可以通过Google搜索找到:

  • " java.util.concurrent.locks.ReentrantLock source"
  • " java.util.concurrent.locks.AbstractQueuedSynchronizer source"

代码得到了极好的评论。

简短的回答是每个锁都有一个等待线程的队列,它被实现为一个链表。

  • 在" fair" case,当队列非空时尝试获取锁的线程被添加到队列的末尾。

  • 在"不公平"如果锁定当前空闲,则线程可能会插入。这样可以提供更好的性能,因为您不需要进行需要系统调用的线程上下文切换。