我有一个简单的Java IO TCP服务器/客户端原型,其中服务器大量写入客户端,客户端偶尔将写入到服务器。写入发生一个while循环,特别是在run()
线程的Worker
方法中,这是标准的:
@Override
public void run() {
while (true) {
// Server writes to client
try {
socket.getOutputStream.write(writeArray);
} catch (Exception e) {
System.exit(1);
}
}
这是一个while循环,所以如果我还包括一个读操作,它会阻塞。
@Override
public void run() {
while (true) {
// Server writes to client
try {
socket.getOutputStream.write(writeArray);
} catch (Exception e) {
System.exit(1);
}
// Server reads from client
try {
int read = socket.getInputStream.read();
} catch (Exception e) {
System.exit(1);
}
}
是否存在关于如何在不阻塞或大量浪费CPU周期的情况下偶尔进行读取的标准模式?
答案 0 :(得分:2)
看看available()方法:https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html#available--。然后你只需要阅读"如果可用"。