作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在这里做了一些搜索,找不到答案,所以我觉得还是问问比较好。我在一个简单的 Java swing 应用程序中运行了一个有点昂贵的算法。让我描述一下结构:
在我的 JPanel
run()
方法中:
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
作为等待通知机制。
谢谢!
最佳答案
我会使用以下模式来安排重复任务。
private ScheduledExecutorService executorService = null;
public void start() {
if (executorService != null && !executorService.isShutdown()) return;
executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
Algorithm alg = new Algorithm(signal);
alg.run();
updateInterface();
}
}, 0, 60, TimeUnit.MILLISECONDS);
}
public void stop() {
if (executorService != null)
executorService.shutdown();
}
关于Java线程和高cpu使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9714203/
我是一名优秀的程序员,十分优秀!