JAVA按特定顺序唤醒线程

时间:2016-07-02 12:39:20

标签: java multithreading

假设我有10个活动线程,只有3个资源(某些东西) 虽然前三个线程获得了资源,我希望所有其他线程试图让资源等待,但唤醒或通知将是十五顺序我的意思是第一个获得等待的线程将是第一个唤醒。 谢谢大家。

2 个答案:

答案 0 :(得分:2)

我认为此链接很好地解释了它:https://www.safaribooksonline.com/library/view/java-threads-second/1565924185/ch04s03.html

使用通知时,无法事先决定或确定允许执行哪个线程。我看到了两个解决方案:

  • 使用notifyAll()并让每个线程检查自己是否轮流(例如,使用同步的FIFO队列)
  • 使用链接中描述的方法:让每个线程在另一个对象上等待并使用1个线程,该线程的唯一目的是通知正确的对象。这对我来说似乎是最好的解决方案。

答案 1 :(得分:1)

Java通常不会决定这些事情但是如果你使用公平锁定,例如

Lock lock = new ReentrantLock(true);

然后这些线程将按照尝试的顺序获取锁定。这是通过忽略顺序线程将被通知并确保锁定不被采取,除非线程是FIFO队列的下一个。