【发布时间】:2019-04-08 17:57:24
【问题描述】:
我正在经历使用 Scala 学习并发 它有以下一段代码。
package week_parallel.week1.SC_Book
import scala.collection.mutable
object SyncPoolArgs extends App {
private val tasks = mutable.Queue[() => Unit]()
object Worker extends Thread {
setDaemon(true)
def poll() = tasks.synchronized {
while (tasks.isEmpty) tasks.wait()
tasks.dequeue()
}
override def run() = while (true) {
val task = poll()
task()
}
}
Worker.start()
def asynchronous(body: =>Unit) = tasks.synchronized {
tasks.enqueue(() => body)
tasks.notify()
}
def sum(x: Int, y:Int) = {println("USING SUM")
x+y}
asynchronous { log("Hello ") }
asynchronous { log("World!") }
asynchronous { sum(4,5) }
Thread.sleep(500)
}
所以,我的问题是,如果我们有不带参数且不返回任何内容的函数类型的任务,为什么tasks.enqueue(() => body) 将 sum 放入队列中,它不应该在 sum 的情况下检查 body 方法签名是否错误.
另外,我特别无法理解tasks.enqueue(() => body) 是如何限制在private val tasks = mutable.Queue[() => Unit]() 类型的?
【问题讨论】:
标签: scala