【发布时间】:2016-12-01 17:43:03
【问题描述】:
我想在 Scala 2.11 中构建一个侦听套接字的简单服务器。它应该从套接字异步读取数据并将数据从 RxScala 传递到 Observable。
我有一个 Java ServerSocket,应该使用阻塞的方法 readData 从中读取数据。此方法启动一次并运行直到整个程序停止:
val server = new ServerSocket(port)
def readData(server: ServerSocket): Unit = ???
当从套接字读取数据时,我发现了两种不同的方法来避免阻塞整个程序:
new Thread {
override def run(): Unit = {
readData(server)
}
}.start()
和
Future {
blocking {
readData(server)
}
}
由于Future中没有包裹返回值,可以传递给其他任务,Future的唯一任务就是让计算不阻塞。所以我想知道这些方法之间是否有更大的差异?研究 Future 的实现,它看起来也使用给定的块创建并运行 Runnable。那么,如果一个人有一个单一且永远/长时间运行的任务而没有结果,那么这些方法中的一种更可取吗?
【问题讨论】:
标签: multithreading scala asynchronous concurrency future