我如何确定哪个线程在等待更多时间?
我的要求是,在同步方法中,当一个线程完成其工作时,我想允许等待时间最长的线程。我希望我的问题有道理。
答案 0 :(得分:2)
全部取决于您使用的语言和/或环境。据我所知,在Java中没有内在的支持,如果多个线程正在等待进入同步方法,那么系统将选择任意一个在可能进入时运行。
如果您使用Java的wait()/ notify(),那么您可以控制通知哪些线程,因此可以构建自己的优先级机制,例如,您可以拥有一个简单的队列,每个线程在wait()之前添加自己的队列然后你只需从队列中取出顶级项目并通知该线程。
答案 1 :(得分:1)
你不应该而且几乎肯定不需要这样做。
线程环境将为您安排线程。
如果软件设计看起来像是一个问题,那么先发制人的线程环境的设计是不正确的。
您可能希望做的更像是管理工作单元并确定工作单元的优先顺序,例如,服务工作按其到达的顺序进行。
换句话说,工作处理的顺序不应该在你的设计中取决于运行哪个线程,而是你的工作如何分配给线程。
答案 2 :(得分:1)
@djna Java不允许您选择要通知的线程。如果队列中有10个线程,则可以通知其中任何一个。
这可以通过在并发包中使用lock / condition接口来完成。 在这里,您可以将每个线程与条件相关联,然后从该队列中取出一个项目并发出与该线程/任务映射的条件。