我有一个非常复杂的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无法处理这么简单的任务。
答案 0 :(得分:0)
我怀疑这些停止是在一个完整的gc期间,因为一个完整的gc可能会阻止世界释放一些内存(如果你没有使用parellel gc)。 你应该检查gc日志。