JAVA线程引起的CPU满负载

来源:互联网 发布:微信企业宣传软件 编辑:程序博客网 时间:2024/06/03 13:36
 做项目时,第一次遇到了CPU满负荷运作的情况,CPU利用率100%。虽然遇到了问题,但是觉得自己写程序居然都能让CPU满负荷运行,自己的水平已经到了需要考虑软件的效率问题的阶段了。这比以前写的完全不会让CPU有多少利用率的时候要强一点,还是有点小激动呢。但是实际上....并不是因为我的软件有多大型,而是代码写的有问题....害我白高兴了一场。在请教了老师,以及查了资料后,发现并解决了问题。
  接着说说我的问题吧。
问题描述:同样有表格显示。为了让添加的数据实时在表格中显示,我添加了一个进程不停的监听一个状态变量。当状态变量改变时,说明数据已经改变,则线程刷新表格中的数据,
     JAVA线程引起的CPU满负载

JAVA线程引起的CPU满负载
监听线程的代码如下
//刷新表格进程
class listenUpdateThread  extendsThread{
 public JTable table2;
 int aa;
  public listenUpdateThread(JTable table,inta)
 {
 his.table2=table;
 this.aa=a;
 }
 
  public void run()
 {
 while(true)
 {
if(UpDt==000)
 {
 dm.setRowCount(0);
 final List list = dao.selectMenue();
 int stats;
 for(int i = 0;i
 {
 UpdateMenue UpMeu =(UpdateMenue)list.get(i);
 stats=UpMeu.getState();
 if(stats!=1)
                            {
  dm.addRow(newObject[]{"未更新",UpMeu.getId(),UpMeu.getclass(),UpMeu.getName(),UpMeu.getUpdateDate(),UpMeu.getNote(),UpMeu.getPrice(),UpMeu.getPic()});
 }
 else
{
 dm.addRow(newObject[]{"已新",UpMeu.getId(),UpMeu.getclass(),UpMeu.getName(),UpMeu.getUpdateDate(),UpMeu.getNote(),UpMeu.getPrice(),UpMeu.getPic()});
 }
 UpDt=1111;
 }
   
                        
 }
  }
}

这样的效果就是可以实时刷新数据,但是CPU的利用率是100%。
解决方法是:在“添加”按钮点击时,开启一个监听线程。当添加数据了后,关闭那个线程。这样线程就不会一直不停的循环监听,使CPU达到100%。
   添加按钮监听器代码:
  //开启监听表格状态线程 
 listenUpdateThread listenUpdate1=newlistenUpdateThread(table, UpDt);
listenUpdate1.start();
InserUpdateMenue frame = newInserUpdateMenue(UpdateMenuePanel.this);
frame.setVisible(true);
 counter = 0;

线程run()的方法区别就是在满足刷新条件后,加一个break。

0 0
原创粉丝点击