Multithreading 求解一般依赖关系的算法

Multithreading 求解一般依赖关系的算法,multithreading,thread-safety,dependencies,Multithreading,Thread Safety,Dependencies,想象一下,在这种情况下,如果您有一堆相互依赖的Java方法 方法依赖于方法A,方法B,方法C methodX依赖于methodA,methodB 方法B取决于方法A,方法F 方法不依赖任何东西 方法依赖于方法 等等 如果methodA依赖于methodB,这意味着在执行methodA之前必须先执行methodB 假设您不需要担心循环依赖关系 每个方法都由一个线程运行,有一个固定大小的线程池 如果没有循环依赖项,它们最终是否都可以运行? 如何对线程进行排队,以便所有线程最终都能运行 例如,这是行不

想象一下,在这种情况下,如果您有一堆相互依赖的Java方法

方法依赖于方法A,方法B,方法C methodX依赖于methodA,methodB 方法B取决于方法A,方法F 方法不依赖任何东西 方法依赖于方法 等等 如果methodA依赖于methodB,这意味着在执行methodA之前必须先执行methodB

假设您不需要担心循环依赖关系

每个方法都由一个线程运行,有一个固定大小的线程池

如果没有循环依赖项,它们最终是否都可以运行? 如何对线程进行排队,以便所有线程最终都能运行

例如,这是行不通的
methodA依赖于methodB,methodC依赖于methodB,线程池大小为2。如果我将methodA和methodC排队,它们将无限期地挂起,因为它们都在等待methodB,但池已经满了。

仔细想想,可以将线程和方法分开。方法是线程正在执行的

在这种情况下,您应该有2个线程可以执行任何方法。他们将选择一个所有依赖项都已执行的方法,并运行它

重复此操作,直到方法队列为空

顺便说一句,如果你被允许在一个方法的所有依赖项都完成后开始执行它,我的意思是,如果你被允许将它留在队列中,那么逻辑是最简单的