【发布时间】:2019-08-14 15:44:38
【问题描述】:
我的程序/类正在获取需要在并行线程中运行的类列表(例如 C-1() 到 C-100())。每个都是它自己的类,并且有自己的可执行文件,所以我不需要编译,只需运行。虽然每个类都有一个参数,但每个类内部的逻辑可能非常不同。所以没有希望多次启动一个带参数的类。
类列表是可变的。可能有一个类(C-3())或多个(C-1(),C-2(),C-4(),C-3()),它们可能是也可能不是任何顺序。
我已经使用了带有循环和 switch 语句的批量方法,但其中的 100 个代码似乎不必要地复杂,而且坦率地说看起来很糟糕。但它有效,最坏的情况下,将完成这项工作。但这让我很困扰。
case ("C-1")
{
new C-1("parm").start();
}
etc .... x 100
lambda 函数可能会让我到达那里,但它超出了我的经验。
我不想把它掏空。这似乎既低效又可能是性能杀手。
在一个完美的世界中,我会动态地从列表中拉出项目并启动它。但我不知道如何动态替换对象名。我不想通过任何巧妙的链接来减慢它的速度。我的专业知识不足以解决那个问题。
添加一些东西也很好,如果列表少于 10,它会在同一个线程中运行它,并且只有在它高于该线程时才会大规模并行。但这也超出了我的专业范围。
【问题讨论】:
-
每个类的构造函数参数的类型是否相同?这些类有共同的超类型吗?
-
我们需要更多信息——例如,每个类名是否与您对
switch语句的输入完全相同? ——但我认为约翰有权这样做。可能你必须通过反射来做到这一点。
标签: java multithreading dynamic scheduling