0

非常に複雑な Java プログラムがあります。それは正常に動作します。ただし、アプリで「動作中」のアニメーションを印刷して、アプリが応答していることをユーザーに知らせたいと思います。次のようなコードで単純なクラスを作成しました。

public class Working extends Thread {
    private volatile boolean finished = false;
    char[] animationChars = new char[] { '|', '/', '-', '\\' };
    int anim = 0;

    public void finish() {
        finished = true;
    }

    public void run() {
        try {
            while (!finishing) {
                print();
            }
        } catch (Exception e) {
            // nothing here...
        }
    }

    private void print() throws InterruptedException {
        for (int i = 0; i < SLEEP_SECS; i++) {
            System.out.print("\rWorking... " + animationChars[anim++]);
            if (anim == 4)
                anim = 0;
            Thread.sleep(1000);
        }
    }
}

これを実行すると、最初は正常に動作します。しかし、時間が経つにつれて、アニメーションが数秒間停止する場合があります。このコードを別のスレッドに移動すれば解決しますが、ご覧のとおり、そうではありません!

私のプロジェクトは、データベースにアクセスし、コマンドライン プロセスを実行し、ページを頻繁にダウンロードします。この問題の原因は何ですか? 私は何かが欠けているのでしょうか、それとも Java はそのような単純なタスクを処理することができませんか?

4

1 に答える 1

0

完全な gc は世界を停止してメモリを解放する可能性があるため (並列 gc を使用していない場合)、これらの停止は完全な gc 中にあると思われます。gc ログを確認する必要があります。

于 2013-02-08T23:39:17.523 に答える