是否可以在达到 countDown 时保留线程的顺序,因为它们会等待。
如果线程 1 在线程 2 之前调用 await,那么它们应该以相同的顺序重新调度。
这有什么意义吗:)?
是否可以在达到 countDown 时保留线程的顺序,因为它们会等待。
如果线程 1 在线程 2 之前调用 await,那么它们应该以相同的顺序重新调度。
这有什么意义吗:)?
看起来你在谈论某种公平CountDownLatch
。
一般来说,公平性并不是倒计时锁存器真正关心的问题(尤其是在 Java 及其java.util.concurrent
实现中)。当达到预定义的倒计时次数时,锁存器将向所有等待它的线程发出信号。
饥饿或调度顺序与此时的闩锁功能正交 - 没有从等待线程的集合/队列中进行受控选择的概念,就像您可能对信号量或互斥锁一样。
迪米塔尔·季米特洛夫说,
...没有从等待线程的集合/队列中进行受控选择的概念,就像您可能对信号量或互斥锁一样。
那是因为信号量或互斥量上的单个操作只能释放一个等待线程。如果有多个线程在等待,您可以定义释放它们的顺序,即第一个操作释放该线程,下一个操作释放该线程,依此类推。
CountDownLatch 不同,因为当理想行为是单个操作同时释放所有等待线程时,尝试定义顺序有什么意义?