gpt4 book ai didi

java - 让线程等待对话框输入

转载 作者:行者123 更新时间:2023-11-30 01:42:10 30 4
gpt4 key购买 nike

我编写了一个这样工作的结构:

Activity discoveryActivity - UI thread
↕ Calls through interface
Service discoveryService - Bound service running on UI thread
↕ Actions through Handler.post(↑) or functions (↓)
Runnable connectionThread - Socket networking

在某些时候,connectionThread 需要一个 String 才能继续。

  1. 所以我用 Handler.post(..) 调用 discoveryService
  2. 通知 discoveryActivity 显示一个 AlertDialog

用户输入数据大约需要20秒,然后会确认输入。

问题 1: 同时线程会做什么?

现在我需要再次进入线程。

访问 discoveryService 很容易

问题 2: 如何在不重新启动的情况下让线程再次工作?该线程现在正处于一个带有几个 Socket 的复杂循环中!

我的第一个想法是保持线程运行

// Inside run()
while(stringWrapper.get() == null) {
Thread.sleep(500);
}

// Outside run()
void setStr(String s) { stringWrapper.set(s); }

但是这样效率很低

然后我阅读了关于 wait()notify()我在线程本身和 StringWrapper(一个包含对 String 的引用的简单类)

上进行了尝试

我很无助,我认为 wait()notify() 是正确的方法吗?

你能给我一个提示,我应该在哪里实现这些以及它们将在哪个对象上被调用?

TL;DR:我想让一个线程暂停,直到它接收到数据

最佳答案

不能 100% 确定您要完成的任务,但您可以使用 SettableFuture(来自 Google Guava library)来解决您的问题。

private final SettableFuture<String> stringFuture = SettableFuture.create();

// Inside run()
// This will block your thread until stringFuture is set, or until the given timeout has expired.
final String string = stringFuture.get(1, TimeUnit.MINUTES);

// Outside run()
public void setStr(final String s) {
stringFuture.set(s);
}

关于java - 让线程等待对话框输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34344489/

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