Multithreading 如何使用多线程的未来?
我是斯卡拉的新手。我正在学习Scala中的多线程。Scala中多线程的一种方式是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.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的新概念(我相信)。这就是问题所在。