首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:在原始线程的上下文中,从另一个线程调用回调

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

Stack Overflow用户
提问于 2017-01-31 07:30:46
回答 2查看 2.6K关注 0票数 5

我有点惭愧地问了这个基本的问题,但它在这里。

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

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

我知道我可以使用FutureFutureTask等,但我觉得很笨重。

示例:

代码语言:javascript
复制
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();
        }
}

输出:

代码语言:javascript
复制
main(): thread 1
ThreadTest(): thread 1
run(): thread 9
print(): thread 9

我想要的是:

代码语言:javascript
复制
main(): thread 1
ThreadTest(): thread 1
run(): thread 9
print(): thread 1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-31 07:45:09

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

换句话说:在数据结构之间放置一个数据结构,一边可以写入,另一边可以读取。

实现这一目标的常见方法是使用ConcurrentLinkedQueue。有关进一步阅读,请参见here;包括一个简单的生产者/消费者场景。

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

  1. 一个工作线程,它做一些事情,并使用一个未来提供结果(用于“捡起来”)
  2. 某些线程B在某个时候触发主线程的回调。

换句话说:这可以看作是“拉”(使用未来)或“推送”(调用回调方法的线程B)。我建议决定一个概念,不要同时使用两个概念的"50%“!

票数 2
EN

Stack Overflow用户

发布于 2017-01-31 07:53:36

最不复杂的解决方案是使用wait()notify()

顺便提一句,我认为期货没有什么不妥之处,尤其是如果我们谈论的是java8和CompletableFuture

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41951964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档