gpt4 book ai didi

java - 在不同类上使用线程生成的值的最佳方法

转载 作者:行者123 更新时间:2023-11-29 07:43:11 24 4
gpt4 key购买 nike

我有一个主类、另外两个类和一个线程。当线程完成执行时,该结果应该可用于所有三个类。所以基本上就像一个触发功能。什么解决方案可以解决这个问题?

最佳答案

一个有效的简单示例可能如下所示:

import java.util.ArrayList;
import java.util.Collection;

public class MainClass implements ResultReceiver {

public static void main(String[] args) {

SeparateThread separateThread = new SeparateThread();
separateThread.registerForResult(new MainClass());
separateThread.registerForResult(new OtherClass1());
separateThread.registerForResult(new OtherClass2());
separateThread.start();
}

@Override
public void receive(String result) {
System.out.println("MainClass.receive(\"" + result + "\")");
}

}

class SeparateThread extends Thread {

private static final Collection<ResultReceiver> receivers = new ArrayList<>();

public void registerForResult(ResultReceiver receiver) {
receivers.add(receiver);
}

@Override
public void run() {

try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String result = "Hello" + " " + "world";

for (ResultReceiver receiver : receivers) {
receiver.receive(result);
}
}

}

class OtherClass2 implements ResultReceiver {

@Override
public void receive(String result) {
System.out.println("OtherClass2.receive(\"" + result + "\")");
}

}

class OtherClass1 implements ResultReceiver {

@Override
public void receive(String result) {
System.out.println("OtherClass1.receive(\"" + result + "\")");
}

}

interface ResultReceiver {
void receive(String result);
}

然而,在大多数情况下,等待结果并在主线程中处理所有结果(更复杂的解决方案)更可靠。

关于java - 在不同类上使用线程生成的值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28168396/

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