gpt4 book ai didi

java - 访问正在运行循环的另一个线程的结果

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

线程 A 是一个执行计算的循环。

Thread B 需要读取 Thread A 中包含的循环的每次迭代产生的结果。

在不阻塞任何东西的情况下实现这一目标的最佳方法是什么?

最佳答案

这里需要生产者-消费者模式。在 Java 中,您可以使用 BlockingQueue 来实现它。下面是一个包含 ArrayBlockingQueue 的示例,用于将 Double 计算结果从生产者传递给消费者:

Producer.java

class Producer implements Runnable {
private final BlockingQueue<Double> queue;

public Producer(BlockingQueue<Double> q) {
queue = q;
}

public void run() {
try {
while (true) {
Double result = calculateResult();
// This call will make the result available to the consumer:
queue.put(result);
}
} catch (InterruptedException ex) {
// Handle thread interruption here
}
}
}

消费者.java

class Consumer implements Runnable {
private final BlockingQueue<Double> queue;

public Consumer(BlockingQueue<Double> q) {
queue = q;
}

public void run() {
try {
while (true) {
// This call Will wait until the next result is available:
Double result = queue.take();
// Process the result...
}
} catch (InterruptedException ex) {
// Handle thread interruption here
}
}
}

程序.java

class Program {
public static void main() {
BlockingQueue<Double> queue = new ArrayBlockingQueue<>();
Producer producer = new Producer(queue);
Consumer consumer = new Consumer(queue);
new Thread(producer).start();
new Thread(consumer).start();
}
}

如果需要,您可以创建共享同一个队列的多个消费者或多个生产者(或两者)。这将使您能够平衡两个以上线程之间的工作。

另请查看 BlockingQueue 的功能和其他实现,其中有很多。

关于java - 访问正在运行循环的另一个线程的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39311731/

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