小编nic*_*ing的帖子

Scala Future vs Thread 用于长时间运行但没有结果的任务

我想在 Scala 2.11 中构建一个简单的服务器来监听套接字。它应该从套接字异步读取数据并将数据从 RxScala 传递到 Observable 中。

我有一个 Java ServerSocket,应该使用readData阻塞的方法从中读取数据。这个方法启动一次,一直运行到整个程序停止:

val server = new ServerSocket(port)
def readData(server: ServerSocket): Unit = ???
Run Code Online (Sandbox Code Playgroud)

当从套接字读取数据时,我发现了两种不同的方法来避免阻塞整个程序:

new Thread {
  override def run(): Unit = {
    readData(server)
  }
}.start()
Run Code Online (Sandbox Code Playgroud)

和

Future {
  blocking {
    readData(server)
  }
}
Run Code Online (Sandbox Code Playgroud)

因为 Future 中没有包装返回值,然后可以将其传递给其他任务,所以 Future 的唯一任务是使计算非阻塞。所以我想知道这些方法之间是否有更大的差异?查看 Future 的实现,它看起来还使用给定的块创建并运行 Runnable。那么,如果一个人有一个永远/长时间运行的任务而没有结果,那么这些方法之一是否更可取?

concurrency multithreading asynchronous scala future

5
推荐指数
1
解决办法
2326
查看次数