使用while循环创建Socket时阻塞的问题
在创建Socket服务的时候,使用while循环创建Socket对象,发现执行到accept()方法时程序不再运行,导致项目不能运行。
accept() 会阻塞程序执行(后面代码不能被执行),直到有新的请求到来
所以要使用线程的方式创建socket,这样不会阻塞程序的运行
//线程启动socket,因为accept会阻塞
Runnable r = new Thread() {
@Override
public void run() {
System.out.println("创建线程");
ServerSocket server = null;
try {
server = new ServerSocket(55111);
//防止内存溢出使用线程池
ExecutorService es = Executors.newFixedThreadPool(8);
//循环监听
while (true) {
//accept将会阻塞,不再执行,直到有请求过来
Socket socket = server.accept();
//将操作封装到Handler中,使用线程池启动
es.execute(new Handler(socket, lqBankLogService));
//接收请求执行线程时,while循环接着创建了另一个Socket对象并等待请求
}
} catch (Exception e) {
}
}
};
//启动线程,开始创建Socket对象
new Thread(r).start();