主要看到的书是《Netty实战》,里面提到阻塞I/O相关的代码,索性敲下代码理解下:
以上是书中的代码截图,以下是我的代码:
package com.vocter.test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class blockIOtest {
public static void main(String[] args) throws Exception {
//创建服务器端的监听端口
ServerSocket serverSocket=new ServerSocket(1111);
Socket clientSocket=serverSocket.accept();
BufferedReader in=new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out=new PrintWriter(clientSocket.getOutputStream(),true);
String request,response;
while ((request=in.readLine())!=null){
if("Done".equals(request)){
System.out.println("good bye"+request);
break;
}
response=processRequest(request);
out.println(response);
System.out.println("test"+response);
}
}
public static String processRequest(String text)
{
return "good take!"+text;
}
}
其中代码执行后,客户端连接的过程是:
1、客户端进行连接;
2、客户端发送字符串到服务器端;
3、客户端关闭TCP连接;
4、服务器端判断,如果服务器端收到的是“Done”,则打印“good byeDone”,并结束进程;如果服务器端收到的不是“Done”,则打印“good take”+收到的字符串。
由于以上代码只能同时处理一个连接,要管理多个并发客户,需要为每个新的客户端创建新的Thread。
那问题来了:
1、如何创建多个thread;
2、随着多个thread,是否会占用更多的内存资源;
3、一般如何衡量一个环境最多可以支持多少个thread。
虽然这些问题好像看似没什么意义,但有时间还是可以做下试验测试下。