gpt4 book ai didi

Java:在原始线程的上下文中从另一个线程调用回调

转载 作者:行者123 更新时间:2023-12-01 14:29:00 24 4
gpt4 key购买 nike

问这个基本问题我有点惭愧,但就是这样。

假设我有一个主类和一个工作线程。工作线程执行一些异步工作并将结果返回给主类的回调。

现在我挣扎的是:主类的回调作为工作线程的一部分执行。我已经这样做了十几次,它从来没有对我造成任何问题,但我想知道如何优雅地将响应从工作线程传回实际的主线程。

我知道我可以使用 FutureFutureTask等等,但对我来说感觉很笨重。

例子:

class ThreadTest {
private Runnable mRunnable;

public ThreadTest() {
System.out.println("ThreadTest(): thread " + Thread.currentThread().getId());
mRunnable = new Runnable() {
public void run() {
System.out.println("run(): thread " + Thread.currentThread().getId());
print();
}
};
new Thread(mRunnable).start();
}
private void print() {
System.out.println("print(): thread " + Thread.currentThread().getId());
}
public static void main(String... args) {
System.out.println("main(): thread " + Thread.currentThread().getId());
ThreadTest t = new ThreadTest();
}
}

输出:
main(): thread 1
ThreadTest(): thread 1
run(): thread 9
print(): thread 9

我想得到什么:
main(): thread 1
ThreadTest(): thread 1
run(): thread 9
print(): thread 1

最佳答案

此类问题的一种常见解决方案是在主线程和工作线程之间提供“通信 channel ”。

换句话说:您在一侧可以写入而另一侧可以读取的数据结构之间放置了一个数据结构。

这样做的常用方法是使用 ConcurrentLinkedQueue。
here进一步阅读;包括一个简单的生产者/消费者场景。

除此之外,你应该更清楚你的设计。我的意思是:我要么专注于

  • 一个工作线程做某事,并使用 Future
  • 提供结果(用于“捡起它”)
  • 某个线程 B 在某个时候触发了主线程上的回调。

  • 换句话说:这可以被视为“拉”(使用 Future)或“推”(线程 B 调用回调方法)。我建议决定 概念,不要同时使用两个概念的“50%”!

    关于Java:在原始线程的上下文中从另一个线程调用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41951964/

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