我是Scala的新手。我正在学习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]
意味着 future 没有执行。连 sleep 都没有用。
我知道我这里缺少东西,但无法弄清楚。
更新
我知道while(true)在 future 之内不是正确的方法,但是true对于连续运行服务器是必需的。我知道我的方法是错误的。我要问的是:正确的方法是什么?
最佳答案
response
是从while(true)
开始的 future 。它不可能完成。
关于multithreading - 如何使用 future 进行多线程处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607997/