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 回答