IO阻塞时怎么检查判定循环flag变量的值啊?
public static void main(String[] args) throws IOException{
serverSocket = new ServerSocket(9001);
Socket socket = serverSocket.accept();
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader typing = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Connected to client");
new Thread(new Runnable() {
@Override
public void run(){
while(!endOfSession){
try{
//就是这里,当用户输入over时,直接结束本次会话。但是readLine()会阻塞直至控制台输入换行符,然后才能检查///endOfSession,有什么办法当endOfSession变为true时直接跳出循环的吗?
String line = typing.readLine();
printWriter.println("Server: "+line);
}
catch (IOException e){
}
System.out.println("Enter input finished");
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try{
String info = bufferedReader.readLine();
if(info!=null)
System.out.println(info);
else break;
}
catch (IOException e){
endOfSession = true;
System.out.println("The socket is closed!");
break;
}
}
}
}).start();
}
我写的一个简单地对socket对话程序,服务器端和客户端代码几乎没区别。服务器accept()后,创建两个线程,一个不断从键盘读标准输入并打印给客户端,另一个不断从socket读输入打印到控制台。当客户端断开连接时,第二个线程可以直接over,并改变第一个线程循环条件变量的值,但是第一个线程始终在等待用户输入,只有输入换行符后,才会再判端循环条件。有什么办法让线程一在等待用户输入时也可以得知socket已经关闭了吗?
serverSocket = new ServerSocket(9001);
Socket socket = serverSocket.accept();
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader typing = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Connected to client");
new Thread(new Runnable() {
@Override
public void run(){
while(!endOfSession){
try{
//就是这里,当用户输入over时,直接结束本次会话。但是readLine()会阻塞直至控制台输入换行符,然后才能检查///endOfSession,有什么办法当endOfSession变为true时直接跳出循环的吗?
String line = typing.readLine();
printWriter.println("Server: "+line);
}
catch (IOException e){
}
System.out.println("Enter input finished");
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try{
String info = bufferedReader.readLine();
if(info!=null)
System.out.println(info);
else break;
}
catch (IOException e){
endOfSession = true;
System.out.println("The socket is closed!");
break;
}
}
}
}).start();
}
我写的一个简单地对socket对话程序,服务器端和客户端代码几乎没区别。服务器accept()后,创建两个线程,一个不断从键盘读标准输入并打印给客户端,另一个不断从socket读输入打印到控制台。当客户端断开连接时,第二个线程可以直接over,并改变第一个线程循环条件变量的值,但是第一个线程始终在等待用户输入,只有输入换行符后,才会再判端循环条件。有什么办法让线程一在等待用户输入时也可以得知socket已经关闭了吗?
...全文
相关推荐
WINDOWS下的非阻塞IO
----------------------WINDOWS下的非阻塞IO
Linux设备驱动编程之阻塞与非阻塞
Linux设备驱动编程之阻塞与非阻塞 Linux设备驱动编程之阻塞与非阻塞 Linux设备驱动编程之阻塞与非阻塞
服务器编程-重叠IO原理
Windows系统编程之异步I/O和完成端口,从操作系统的角度讲述完成端口的原理。
面试官:如何终止线程?有几种方式?
在 Java 中有以下 3 种方法可以终止正在运行的线程: 使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程终止; 使用 stop() 方法强行终止线程,但是不推荐使用这个方法,因为使用此方法不安全,目前该方法已被弃用; 使用 interrupt()方法中断线程。 第一种:使用标志位终止线程 使用标志位终止线程就是定义一个boolean型的标志位 ,在线程的run方法中根据这个标志位是为true还是为false来判断是否终止,这种情况多用于while循环中。 class StopThread extends Thread { //标志位 private boolea
Java线程关闭的3种方法
介绍了Java线程关闭的3种方法,有需要的朋友可以参考一下


Java SE
