gpt4 book ai didi

java - 多线程数组比较 - 将事件推送到线程?

转载 作者:搜寻专家 更新时间:2023-11-01 03:36:38 25 4
gpt4 key购买 nike

我有一个简单的多线程问题(在 Java 中)。我有 2 组 4 个非常大的数组,我有 4 个线程,集合中的每个数组 1 个。我希望线程并行检查两个集合是否具有相同的值。如果一个数组中的一个值与另一个数组中的相应索引值不匹配,则这两个集合不相同,所有线程都应该停止他们正在做的事情并继续进行下一组 4 个非常大的数组.这个过程一直持续到所有的阵列组对都被比较并被认为相等或不相等。当其中一个线程发现不匹配时,我希望所有线程都停止。实现这个的正确方法是什么?

最佳答案

这是一个简单的解决方案,但我不知道它是否最有效:只需声明一个带有公共(public) boolean 字段的对象。

public class TerminationEvent {
public boolean terminated = false;
}

在启动线程之前,创建一个新的 TerminationEvent 对象。在构造线程对象时使用此对象作为参数,例如

public class MyThread implements Runnable {
private TerminationEvent terminationEvent;
public MyThread(TerminationEvent event) {
terminationEvent = event;
}
}

相同的对象将传递给每个 MyThread,因此它们都将看到相同的 boolean

现在,每个 MyThread 中的 run() 方法都会有类似的内容

if (terminationEvent.terminated) {
break;
}

在循环中,当其他线程需要停止时,将设置terminationEvent.terminated = true;

(通常我不会使用像 terminated 这样的公共(public)字段,但你说你想要效率。我认为这比 getter 方法更有效,但我没有尝试过任何基准测试. 另外,在像这样的简单情况下,我认为您不必担心线程读取或写入 terminated 字段时的同步问题。)

关于java - 多线程数组比较 - 将事件推送到线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29763809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com