[英]How to extract return value from Thread in kotlin
假设我有一个函数,可以在其中发送 http 请求并获取结果。 显然,我在里面有一些等待:
fun getDocuments(): JsonObject {
Thread {
return@Thread functionToGetHttpResultAsJsonObject()
}.start()
}
我需要的是将 functionToGetHttpResultAsJsonObject() 的返回值提取到 getDocuments() 返回值中。 但是我得到了 Unit 而不是我想要的 JsonObject。 任何帮助将不胜感激
让我们开始说你的要求有点奇怪。 您通常不会旋转线程来阻止主线程等待它完成。 线程的要点是不要那样做。
没有简单的方法可以在线程之间传递信息。
如果你想等待一个线程在另一个线程内完成,你应该调用.join()
而不是.start()
但这不会返回任何东西。 如果要同步两个线程。 因此,一个等待另一个计算一些数据并获取该数据,一种方法是使用BlockingQueue
val queue = LinkedBlockingQueue<Int>()
Thread {
println("concurrency ftw")
Thread.sleep(1_000)
println("finish sleeping!")
queue.add(1)
}.start()
println("first")
println(queue.take())
注意我在这里使用.start()
是因为我不想阻塞第二个线程来完成它的处理。
主线程将在.take
处.take
直到有人添加一些数据。 同时,如果第二个线程首先到达.add
它也会阻塞,直到有人使用该数据。
在这一点上我还应该提到 Kotlin 有协程的概念。 它们在概念上与 Go 的“通道”非常相似,我建议也研究这些。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.