- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的程序/类正在获取需要在并行线程中运行的类列表(例如 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 函数可能会让我到达那里,但它超出了我的经验。
我不想把它掏空。这看起来既效率低下,又可能成为性能 killer 。
在完美的世界中,我会动态地从列表中提取该项目并启动它。但我不知道如何动态替换对象名。我不想用任何巧妙的链接来减慢速度。我的专业知识不足以解决这个问题。
最好添加一些内容,这样如果列表小于 10,它就会在同一个线程中运行它,并且只有在列表超过 10 时才进行大规模并行。但这也不属于我的专业知识。
最佳答案
In a perfect world, I would dynamically pull the item from the list and launch it. But I cant figure out how to replace the objectname dynamically.
这种动态操作的Java子系统和技术称为“反射”。 java.lang.Class
类在这里起着核心作用,其余大部分关键类都来自包 java.lang.reflect
。反射允许您获取通过名称标识的类的 Class
对象,创建该类的实例,并调用这些实例上的方法。
如果您的 C-* 类都具有定义 start()
方法(Thread
?)的公共(public)父类(super class)或接口(interface),那么您甚至可以执行普通方法调用反射。
假设您想要动态实例化的所有类都提供接受相同参数类型并且想要向其传递相同参数值的构造函数,您可以使用它来节省编写 100 路条件或一百个不同的适配器类或类似的,适合您的情况。从原理上讲,它的工作原理如下:
获取或创建所需类的完全限定类名,例如 className
。
获取对应的Class
Class<?> theClass = Class.forName(className);
获取表示您要使用的构造函数的构造函数
。在您的示例中,构造函数采用与 String
类型兼容的单个参数。如果声明的参数类型实际上是 String
本身(而不是 Object
或 Serialized
,或...),那么就会像这样完成所以:
Constructor<?> constructor = theClass.getConstructor(String.class);
有了它,您就可以实例化该类:
Object theInstance = constructor.newInstance("parm");
如上所述,您的路径取决于是否存在共同的父类(super class)型。如果有的话就可以
强制转换实例并正常调用其方法:
((MySupertype) theInstance).start();
否则,您还需要以反射方式调用该方法。由于感兴趣的方法不带任何参数,这在某种程度上简化了:
获取Method
实例。
Method startMethod = theClass.getMethod("start");
调用对象上的方法
startMethod.invoke(theInstance);
你还提到,
It would also have been nice to add something so that if the list is less than 10, it would run it in the same thread and only go massively parallel if it was above that.
以上内容与启动运行代码的新线程没有任何直接关系。如果这是 start()
方法自己执行的操作(例如,如果涉及的类将 java.lang.Thread
作为父类(super class)),那么避免的唯一选择每个运行在自己线程上的对象都使用不同的方法。
另一方面,如果您从在一个线程中运行的所有内容开始并希望实现并行化,则可以使用 @PaulProgrammer's answer 中所述的线程池。是一个很好的方法。请注意,如果任务彼此独立(正如您的描述所示),那么尝试确保它们全部同时运行就没有多大意义。线程数量多于运行它们的核心数量并不能真正帮助您,线程池对于排队任务以进行并行执行非常有用。当然,检查列表的 size()
来决定是将任务发送到线程池还是直接运行它们会很简单。
关于java - 有没有更优雅的方式来启动基于列表的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57498008/
您如何优雅编码同一tableView中的两种类型的单元格? 显然我可以这样: NSDictionary *cellInfo = [_userInformation objectAtIndex:inde
假设我正在编写一个仅包含标题或主要包含标题的库,并且具有以下代码: using my_type = int; namespace detail { inline void foo() { my
我正在使用复选框和输入进行一系列启用/禁用选择,我想知道我是否可以使用循环、变量或复合语句来简单地处理这个js?感觉就像是使用大量代码来实现相对简单的功能。 这是我正在做的事情的一个 fiddle :
我正在尝试为来自维基百科的 API 响应编写一个解析器。它真的很困惑,我已经求助于旧的 RegEx 来清理大部分东西。然而,我坚持这一点。考虑一个字符串: var a ="[[December 1]
我正在通过一个 channel 接收多个消息,并在对其进行迭代之后,我想保留最后一个元素以供进一步使用。我的第一个(可能很糟糕!)方法是声明一些变量,然后在每个循环中分配它。 let last = 0
我正在编写一个 PHP Web 应用程序,它将在不久的将来在生产环境下运行,而不是使用非用户友好的 die() , 我想我会想出一个 Class处理错误消息。 基本上,我的思考过程是这样的: 如果 W
我们有 elb 负载平衡 2 台运行 tomcat 作为应用程序服务器的 WAS 机器。要实现AWS环境下的不间断部署,我们应该, 选择部署目标 WAS。 让它停止来自 elb 的交易。(elb 暂停
何为pythonic? pythonic如果翻译成中文的话就是很python。很+名词结构的用法在中国不少,比如:很娘,很国足,很CCTV等等。 我的理解为,很+名词表达了一种特殊和强调的意味。
认为已经有对此的答案,但找不到。我一直在以某种方式解析方法选项,并想检查并确保它是最优雅/最简洁的方式。 这是我通常做的: def some_method *args options = args
我正在清理我的一个旧项目。它必须做的一件事是——给定笛卡尔网格系统和网格上的两个正方形,找到所有正方形的列表,连接这两个正方形中心的线将通过这些正方形。 这里的特殊情况是所有起点和终点都被限制在正方形
如何使系统 ( SystemB1 ) 访问另一个系统 ( SystemA::sub ) 的字段,就好像它是自己的字段一样? SystemA是一个拥有自己领域的实用系统 Sub* sub . Syste
我有一个包含约 8.000.000 条记录的 MySQL 数据库。因为我需要处理所有这些,所以我使用 BlockingQueue 作为生产者从数据库读取数据并将 1000 条记录放入队列中。 Cons
我正在让我的 HTTP 服务器正常关闭。我从帖子中获取了提示 here ,到目前为止,我的代码是这样设置的: func start() { //...... //START HTTP/
示例脚本只是“wc -m”命令的包装器,简单的符号计数器。我尝试只用“teststrings” slice 元素提供输入。并在输出监听器 goroutine 接收每个字符串的符号数。寻找一种让“wc”
我想干净/优雅地关闭 Internet Explorer。 taskkill 会关闭它,但是当重新打开它时,它会询问您是否要重新打开上一个 session 。 最佳答案 尝试 CloseMainWin
Haskell 的简洁和优雅给我留下了深刻的印象。但我在 .Net 公司工作,所以当我可以使用 F# 时我会使用它——我可能是全国数百个使用它的人中唯一的一个。 ADO.NET 或 F# 是否提供像
如果我们不想在我们的类中实现 init 方法,并且记住 NSObject 中的 init 只返回一个没有初始化的对象实例,如果我们已经得到了,我不明白调用 init 的意义带有分配的实例。我已经尝试过
我们的组织中有许多初级 Delphi 开发人员,作为向他们教授 Delphi 过程的一部分,我希望他们能够看到“干净”、编写良好、设计良好的 Delphi 代码。 我要寻找的一些标准包括: 优秀的类(
我有一个 3D 图像扫描(形状:335x306x306,总元素:31368060),我想用相同大小的 3D bool 掩码来掩盖它以返回相同大小的蒙版图像。 当我简单地用掩码索引数组时: masked
如何使适配器类适本地支持 const 和非 const 底层数据? 具体例子 RigidBody是描述对象物理属性的类。 这是其非常简化的版本(1D):- class RigidBody{ f
我是一名优秀的程序员,十分优秀!