[英]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.