【发布时间】:2017-03-12 08:44:10
【问题描述】:
我从 Kathy Sierra 和 Bert Bates 的 Head First Java 那里得到了这个问题。在本书的网络和线程部分,他们构建了一个聊天客户端并通过启动一个单独的线程来处理传入的消息:
public class IncomingReader implements Runnable {
public void run() {
String message;
try {
while ((message = reader.readLine()) != null) { //reader is a BufferedReader from an InputStreamReader of a Socket
System.out.println("read " + message);
incoming.append(message + "\n"); //incoming is a JTextArea they declared earlier
}
} catch (Exception ex) {ex.printStackTrace();}
}}
并且这个线程只启动一次,在他们设置 Swing GUI 和读取器和写入器之后。
所以我的问题是,这个线程如何能够保持活力并继续监听传入的消息。当message 是null 时,它不应该越过while 循环并死掉吗?
【问题讨论】:
-
BufferedReader.readLine()被阻塞,它会等到有东西要读。见this -
不清楚
reader是什么,但从你的描述来看,是一个永远不会关闭的Socket输入流 -
@BackSlash 非常有用的链接。您能否将您的评论作为答案,以便我接受?
标签: java multithreading