Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 如何使用多线程的未来?_Multithreading_Scala_Concurrent.futures - Fatal编程技术网

Multithreading 如何使用多线程的未来?

Multithreading 如何使用多线程的未来?,multithreading,scala,concurrent.futures,Multithreading,Scala,Concurrent.futures,我是斯卡拉的新手。我正在学习Scala中的多线程。Scala中多线程的一种方式是Scala.actors,但现在它已被弃用。因此,新的方法是使用scala.concurrent或akka.actor。我想使用scala.concurrent。 脚本: 我想做一个聊天服务器,它可以同时接受多个客户端的连接并回复。 我尝试的方式是: while(true) { socket = serverSocket.accept() os = new PrintStream(so

我是斯卡拉的新手。我正在学习Scala中的多线程。Scala中多线程的一种方式是
Scala.actors
,但现在它已被弃用。因此,新的方法是使用
scala.concurrent
akka.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]
意味着期货没有执行。连睡觉都不行。 我知道我在这里缺少一些东西,但我想不出来

更新
我知道while(true)in future不是正确的方法,但true是服务器持续运行所必需的。我知道我的方式是错误的。我想问的是:正确的方法是什么?

回应
是一个未来,从
开始,而(真)
。它是不可能完成的。

那么我还应该使用或做些什么呢???@YashBhardwaj你知道未来是什么吗?它就像一个盒子,里面装着一些计算的结果,这些计算将在未来某个时候完成。在您的代码中,计算包含一个无限循环,因此计算永远不会完成。移除循环,并将整个
serverSocket.accept()
部分从
Future
中移除。这里有太多的东西要解释了。@Jesper好的,没错。我想我误解了未来。对不起。我想做的就是把多线程服务器做成一个聊天室。我看了一段视频,它使用的是
scala.actors
,但不推荐使用。未来是concurrecy的新概念(我相信)。这就是问题所在。