基础知识
Runnable/Callable
Runnable接口只有一个没有返回值的方法。
trait Runnable {
def run(): Unit
}
Callable与之类似,除了它有一个返回值
trait Callable[V] {
def call(): V
}
代码
package concurrency
import java.net.ServerSocket
import java.net.Socket
/**
* 服务类
* */
class NetworkService(port : Int , poolSize : Int) extends Runnable{
val serverSocket = new ServerSocket(port)
def run(){
while(true){
val socket = serverSocket.accept()
new Handler(socket).run()
}
}
}
/**
* 消息处理类
* */
class Handler(s : Socket) extends Runnable{
def message = (Thread.currentThread().getName+"\n").getBytes
def run(){
s.getOutputStream.write(message)
s.getOutputStream.close()
}
}
/**
* 测试多线程,socket
* */
object Main {
def main(args: Array[String]): Unit = {
new NetworkService(2020 , 2).run()
}
}
代码写完,然后开始测试
测试
打开cmd
,输入telnet localhost 2020
输出:
main
遗失对主机的连接
这里的main
,对于主线程
尝试着将new Handler(socket).run
改为:(new Thread(new Handler(socket))).start()