object Test extends App {
val x = 0
val threadHello = (1 to 5).map(_ => new Thread(() => {
println("Hello")
println(x) // this results in join never resolving "collecting data"
}))
threadHello.foreach(_.start())
threadHello.foreach(_.join())
println(x)
}
我仍在學習 Scala 中的并發性,但我遇到了一個問題,即thread.join()永遠無法解決并且程式最終會永遠運行,除非我注釋掉該println(x)陳述句。
除錯顯示執行緒永遠無法訪問 的值x,我不確定為什么會出現這個問題。
IntelliJ除錯時突出顯示的問題
uj5u.com熱心網友回復:
在 Scala 2.13 中,您的代碼實際上對我來說運行得很好。
也就是說,我懷疑您的問題與vals in的初始化順序有關scala.App。如果是這樣,您應該能夠通過 make 來解決它x lazy,如下所示:
object Test extends App {
lazy val x = 0
val threadHello = (1 to 5).map(_ => new Thread(() => {
println("Hello")
println(x) // this results in join never resolving "collecting data"
}))
threadHello.foreach(_.start())
threadHello.foreach(_.join())
println(x)
}
或者,不要使用scala.App:
object Main {
def main(args: Array[String]) {
val x = 0
val threadHello = (1 to 5).map(_ => new Thread(() => {
println("Hello")
println(x) // this results in join never resolving "collecting data"
}))
threadHello.foreach(_.start())
threadHello.foreach(_.join())
println(x)
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/400954.html
