如何使用Futures进行多线程处理?

时间:2016-07-27 08:43:23

标签: multithreading scala concurrent.futures

我是Scala的新手。我正在学习Scala中的多线程。 Scala中多线程的一种方法是scala.actors,但现在已弃用。因此,新方法是使用scala.concurrentakka.actor。我想使用scala.concurrent。 场景: 我想创建一个聊天服务器,它同时接受多个客户端的连接并回复。 我想做的方式是:

    while(true) {
      socket = serverSocket.accept()
      os = new PrintStream(socket.getOutputStream)
      br = new BufferedReader(new InputStreamReader(socket.getInputStream()))

      val newClient = Future {
        os.println("\n\nPlease Enter the Table name to be Extracted\t:")
        restr = br.readLine()

        println("data received from ["+socket.getInetAddress()+"] ["+socket.getPort()+"] and TableName ["+ restr +"]\n")
        new Extractor().extract(dbURL,userId,password,restr,os)
      }
     val clientFormed= newClient.isCompleted
      println("New Client Connection ? ["+clientFormed+"]")
    }

但运行程序后输出显示:

New Response made [false]

意味着期货没有执行。即使是睡眠也不起作用。 我知道我在这里缺少一些东西,但无法弄清楚。

更新 我知道虽然(真实)未来不是正确的方式,但真实是连续运行服务器所必需的。我知道我的方式是错的。我要问的是:做正确的方法是什么?

1 个答案:

答案 0 :(得分:3)

response是以while(true)开头的未来。它无法完成。