从 BufferedReader 获取数据的流似乎是异步调用消费者,这是一个很棒的功能。
为什么是这样?看来 JVM 有一个线程在后台调用lines().forEach()方法。
public class P {
public static void main(String[] args) throws InterruptedException {
while (true) {
Thread.sleep(1000);
java.lang.System.out.println("Running");
}
}
}
class StreamQuestion {
public static void main(String[] args) throws java.io.IOException {
ProcessBuilder pb = new ProcessBuilder().command("java", "P");
pb.environment().put("CLASSPATH", P.class.getProtectionDomain().getCodeSource().getLocation().getPath());
java.lang.Process p = pb.start();
/**
* Question: Why does this program not end? Instead, it keeps printing "Running".
* */
new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream())).lines().forEach(java.lang.System.out::println);
}
}
侃侃无极
相关分类