【发布时间】:2012-03-15 04:55:52
【问题描述】:
我在这里做了一些搜索,但找不到答案,所以我认为最好问一下。 我在一个简单的 Java swing 应用程序中运行了一些昂贵的算法。让我描述一下结构:
在我的JPanelrun()方法中:
public void run() {
while(true) {
Algorithm alg = new Algorithm(signal);
new Thread(alg).start();
//Wait for algorithm to finish
signal.await(alg);
updateInterface();
Thread.sleep(60L);
}
}
算法循环遍历 .JPG 文件的像素,然后循环遍历另一个大整数数组(长度 ~ 12000)并返回。没有额外昂贵的计算槽。我也在算法run() 方法中调用Thread.sleep(60L)。
udpateInterface() 方法很快,只需画一些java.awt.Polygon 对象即可。
即使我打电话给Thread.sleep(60L),我的 Mac Book(2.4 GHz Intel Core 2 Duo,Mem 4GB 1067)上的 CPU 使用率约为 160%。
有没有一种方法可以在不熔化我的计算机的情况下运行它?我使用CountDownLatch 作为
等待通知机制。
谢谢!
【问题讨论】:
-
Thread.sleep正在影响父线程(显示while的那个),而不是 new 线程 (new Thread)... 代码实际上可能一次生成多个线程,具体取决于signal和所有线程。 -
是的,但是算法线程也有睡眠调用。
-
我不明白
sleep调用的目的是什么。如果你有工作要做,你为什么要睡觉”?你是什么意思“融化我的电脑?!工作不能融化你的电脑。计算机的目的是工作。如果你有有用的工作要做,让 CPU 去做。这就是他们的目的。 -
@pst:换句话说,他们的能力被浪费了。信封的顶部在那里,因此他们可以非常快速地完成大量工作。如果您效率低下或浪费 CPU,那是一回事。但如果你有有用的工作要做,你希望 CPU 尽快完成。
-
如果您担心 CPU 负载,您应该找出导致高负载的原因。看起来这是你的算法。那么你想怎么做呢?不运行?
标签: java multithreading swing cpu-usage