想象一下,如果你有一堆相互依赖的方法(在这种情况下是Java)。
如果methodA依赖于methodB,则意味着必须在执行methodA之前先执行methodB。
假设您不必担心循环依赖。
每个方法都由一个Thread运行,有一个固定大小的线程池。
如果没有循环依赖关系,它们最终都可以运行吗?
我如何对线程进行排队,以便所有线程最终运行?
例如,这不起作用 methodA依赖于methodB,methodC依赖于methodB,线程池大小为2.如果我将方法A和方法C排队,它们将无限期地挂起,因为它们都在等待methodB但是池已经满了。
答案 0 :(得分:0)
当你考虑它时,分开线程和方法。方法是线程正在执行的。
你应该拥有(在这种情况下)2个可以执行任何方法的线程。他们将选择一个已经执行了所有依赖项的方法,然后运行它。
重复此操作,直到方法队列为空。
顺便说一句,如果允许你在完成所有依赖项的时候开始执行一个方法(我的意思是,如果允许你将它留在队列中)那么逻辑就是最简单的。