长期运行的应用程序(尾巴般)

时间:2012-05-10 13:48:37

标签: java tail long-running-processes

我想写一个类似app的尾巴。现在这个应用程序扫描文件中的背景变化,并在发生变化时触发事件。

我想运行我的应用程序,直到用户通过按ctrl + c(默认工作)请求退出它。我不想仅仅通过像我做ATM那样无休止的while(true)循环来创造大量的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();
    }

有没有人知道更优雅/正确的做法?

2 个答案:

答案 0 :(得分:2)

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

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

   Thread.sleep(1000);
}

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

答案 1 :(得分:0)

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