gpt4 book ai didi

java - 为什么这段代码等待 1000 毫秒而不是 500 毫秒?

转载 作者:行者123 更新时间:2023-12-04 03:24:31 25 4
gpt4 key购买 nike

我不明白此代码如何打印 1000 而不是 500。我是否遗漏了什么?

    PipedOutputStream writer = new PipedOutputStream();
PipedInputStream reader = new PipedInputStream();
writer.connect(reader);
BufferedReader stream = new BufferedReader(new InputStreamReader(reader));

ScheduledExecutorService thread = Executors.newSingleThreadScheduledExecutor(new ThreadFactoryBuilder().build());
thread.schedule(() -> {
try {
Thread.sleep(500);
writer.write("test\n".getBytes(StandardCharsets.UTF_8));
} catch (InterruptedException | IOException ignored) {
}
}, 0, TimeUnit.MILLISECONDS);

long startTime = System.currentTimeMillis();
stream.readLine();
long duration = System.currentTimeMillis() - startTime;
System.out.println(duration);

最佳答案

假设 PipedOutputStreamOutputStream 的子类,在给定的代码中它永远不会被刷新。

由于我们不知道 PipedOutputstream 的确切缓存或刷新行为,可能 test\n 的字节不是在 500 毫秒的等待过程完成后立即写入连接的 PipedInputStream。相反,它会在稍后的某个时间点将第一 block 数据转发到其连接的接收器。

同样,假设 PipedOutputStreamOutputStream 的子类,刷新流将修复此行为。

try {
Thread.sleep(500);
writer.write("test\n".getBytes(StandardCharsets.UTF_8));
writer.flush();
} catch (InterruptedException | IOException ignored) {
}

关于java - 为什么这段代码等待 1000 毫秒而不是 500 毫秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67863719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com