【发布时间】:2021-11-18 03:33:44
【问题描述】:
我怀疑实现这一目标的更好方法是什么:
我有一个包含 5 个布尔变量的类(例如:11111,是一种组合)。现在,问题是我将为每个真正的组合启动一个新线程,这意味着如果我有 11000,我想为 11000 启动一个线程,另一个为 10000,最后一个为 01000。
我必须知道输入组合的所有值。最明显和低效的方法是只比较所有 32 个(在这种情况下)组合(00000、00001 等),并且仅在该组合和实际值(11000)为 != 0 时才开始,那就是我之前提到的案例(11000、10000 和 01000)。
在这种情况下,我将不得不每次进行 32 次比较。问题是,如果那时我有 6 个布尔值,现在我必须做 64 个,依此类推。
谁能想出更好的策略来“捕获”每一种组合?
【问题讨论】:
-
由于启动线程是一项相当昂贵的操作,因此决定何时启动新线程的代码有多复杂并不重要......但目前还不清楚你到底有什么问题 -看来您只需要启动与值 1-31 相对应的 31 个线程(跳过 00000)...也许edit 显示您拥有的代码的问题并简要说明您已经测量了哪些部分并发现它需要优化。跨度>
-
嗨,阿列克谢!我还没有编码,只是看看什么是最好的(或至少是好的)方法。对不起,我不需要启动 31 个线程,我只需要为每个真实位组合启动一个线程。问题是我必须测试所有 31 种具有真实位的组合,即 5 位。也许如果有更多的比特,事情就会开始变得更大。我的问题是这是否是唯一的方法。
标签: java concurrency binary boolean combinations