2012-05-10 7 views
0

私はアプリのような尾を書いてみたいです。今、このアプリは、バックグラウンドで変更をファイルをスキャンし、何かが変更された場合のイベントを発生させます。長時間走っているアプリケーション(尾のような)

ユーザがctrl + c(デフォルトで動作)を押して終了するように要求するまで、アプリケーションを実行します。

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(); 
    } 

誰もがこのために、よりエレガント/右のアプローチを知っています:私はちょうど私がATMをやっているように無限while(true)ループを実行して、CPU負荷の多くを作成したくありませんか?

答えて

2

最初のスレッドを使用している理由はわかりませんが、 'tail' unixスクリプトは終了条件のないループwhile(true)です。ファイルを監視し、変更が検出された場合は変更を出力します。私はデフォルトでは1秒間停止すると思いますので、基本的には

スレッドは不要です。しかし、あなたのアプリを存続させる最良の方法についての質問に答えるには、単にスレッドのrun()メソッドから戻りません。スレッドに参加する必要はありません。アプリケーションはデーモン以外のスレッドを実行している限り、フォアグラウンドにとどまります。

+0

私はしばらくの間(真実)見ていると、私のCPUに多くの不自然な負荷がかかると考えました。 –

+1

それは睡眠のためです。 – TaZ

+0

私はそれを試してみましょう。私はいつもより良い方法があります:D –

0

忙しい待たずにSystem.inを読みたい場合は、それを達成するのは非常に簡単です。 InputStreamブロックセマンティクスを持っていますので、readメソッドの1つを呼び出すだけで、利用可能な入力があるまでブロックされます。テキスト入力をスキャンする場合は、BufferedReader.readLineとお伝えします。また、メインスレッドでそれを行い、別のスレッドを開始する必要はありません。

+0

私は自分の質問を編集しました。なぜあなたの誰かが私の投稿をdownvoteしたのですか? –

+0

「あなたの誰か」とはどういう意味ですか?私を個人的に連れてきて、SO全体を守ってくれますか? –

+0

申し訳ありませんが、私が望むものが不明だと言ったので、それはあなたのことだと思っていました。この代償について申し訳ありません! –

関連する問題