【发布时间】:2022-02-03 15:30:48
【问题描述】:
这只是一个例子。 我有一个输入流,我想为它设置一个监听器。我该怎么做。 第一种方法是创建一个重复检查它的后台线程。
Thread thread = new Thread() {
public void run() {
while(true) {
Thread.sleep(100);
//optional sleep to avoid wasting cpu cycles
int c;
if((c = in.read()) != -1)
addEventToUIthread(c);
}
}
}
但我认为没有 Thread.sleep 会浪费 CPU 周期。 和它;它会降低获取事件的准确性。 假设输入流是一个不可访问的输出流正在写入的文件。 这只是一个示例,说明我不知道此类后台线程的运行时成本。 请解释一下。
【问题讨论】:
-
in.read()阻塞时是否会浪费 CPU 周期? -
正如我之前所说的,这是一个示例,您可能会认为这只是一个条件而不是流。但是 FileInputStream 不会阻塞线程。它将在流结束时返回 -1。
-
当然它会在流的末尾返回一些东西,否则你永远不会知道你已经到达了终点。但在那之前,
read()方法确实会阻塞线程。 FileInputStream#read() -
真;它将很快到达线程的末尾,每当文件增长时,它将读取新内容,否则重复返回-1。
-
抱歉,我的上一条评论第一行有错别字。编辑“文件结尾”
标签: java multithreading listener cpu inputstream