我的java程序使用了thread来响应用户输入,但是查看CPU占用率达到100%,于是我用Thread.sleep(50)的方式把CPU占用率降低到25%,但是我还是认为CPU占用率太高了。下面是我的部分代码。有没有其他办法降低CPU占用率呢?
程序运行后,由于while (true), 程序就一直在draw_all_entitys()里面运行.
// 画出所有的实体
void draw_all_entitys() {
while (true) {
gimage.setColor(Color.black);
gimage.fillRect(0, 0, cvsw, cvsh);
for (int i = 0; i < points.size(); i++) {
points.get(i).draw(gimage, Color.white);
}
try {
Thread.sleep(50);
} catch (Exception exc) {}
cvsimage.drawImage(image, 0, 0, this);
}
}
------解决方案--------------------------------------------------------
swing/awt/swt这些gui界面语言的最大的弊端就是里面的组件使用不当对电脑的消耗都是很大,比如设置字体、颜色、背景等等。还有就是重新画使用repaint()/getUI()/invalidate()/revalidate()等等使用的时候也会出现cpu占用过大,像你的这个情况只要把gimage、cvsimage组件全局实例在初始后,之后应用的时候直接对gimage、cvsimage赋值即可,这样不会消耗大的资源。
------解决方案--------------------------------------------------------
这不是个死循环么 你要干什么啊
刷新可以定时刷新和触发刷新吧你这样不停地画性能是下不来的