0

我想写一个尾巴一样的应用程序。现在,这个应用程序会在后台扫描文件以查找更改,并在发生更改时触发事件。

我想运行我的应用程序,直到用户请求按 ctrl + c 退出它(默认情况下工作)。我不想仅仅通过while(true)像在做 ATM 那样做一个无限循环来创建大量的 CPU 负载:

try {
        // thread doing the monitoring
        thread.start();

        // forcing the programm not to exit
        while (System.in.available() == 0) {
            Thread.sleep(5000);
        }

    } catch (final IOException e) {
        e.printStackTrace();
    }

有谁知道更优雅/更正确的方法?

4

2 回答 2

2

我不确定你为什么首先使用线程,'tail' unix 脚本只是一个while(true)没有退出条件的循环。如果检测到任何更改,它会监视文件并打印更改。我认为默认情况下它会暂停 1 秒,所以基本上:

while(true) {
   // Code goes here. Watch file, System.out.print if it changes

   Thread.sleep(1000);
}

不需要线程。但是要回答有关让您的应用程序保持活力的最佳方法的问题:只需不要从线程的run()方法返回。您不必加入线程,只要应用程序有一个非守护程序运行线程,它就会留在前台。

于 2012-05-10T13:53:47.650 回答
0

如果您想在不忙于等待的情况下阅读 System.in,那很容易实现。InputStream具有阻塞语义,因此您只需调用其中一种read方法,它将阻塞直到有可用输入。如果您正在扫描文本输入,我建议您使用BufferedReader.readLine. 另外,在主线程上执行此操作,没有必要再启动另一个。

于 2012-05-10T13:53:08.423 回答