牛骨文教育服务平台(让学习变的简单)
博文笔记

JAVA线程引起的CPU满负载

创建时间:2016-03-23 投稿人: 浏览次数:2291
  做项目时,第一次遇到了CPU满负荷运作的情况,CPU利用率100%。虽然遇到了问题,但是觉得自己写程序居然都能让CPU满负荷运行,自己的水平已经到了需要考虑软件的效率问题的阶段了。这比以前写的完全不会让CPU有多少利用率的时候要强一点,还是有点小激动呢。但是实际上....并不是因为我的软件有多大型,而是代码写的有问题....害我白高兴了一场。在请教了老师,以及查了资料后,发现并解决了问题。   接着说说我的问题吧。 问题描述:同样有表格显示。为了让添加的数据实时在表格中显示,我添加了一个进程不停的监听一个状态变量。当状态变量改变时,说明数据已经改变,则线程刷新表格中的数据,       JAVA线程引起的CPU满负载
JAVA线程引起的CPU满负载
监听线程的代码如下 //刷新表格进程 class listenUpdateThread  extends Thread{  public JTable table2;  int aa;   public listenUpdateThread(JTable table,int a)  {  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(new Object[]{"未更新",UpMeu.getId(),UpMeu.getclass(),UpMeu.getName(),UpMeu.getUpdateDate(),UpMeu.getNote(),UpMeu.getPrice(),UpMeu.getPic()});  }  else {  dm.addRow(new Object[]{"已新",UpMeu.getId(),UpMeu.getclass(),UpMeu.getName(),UpMeu.getUpdateDate(),UpMeu.getNote(), UpMeu.getPrice(),UpMeu.getPic()});  }  UpDt=1111;  }    }                                 }   } }
这样的效果就是可以实时刷新数据,但是CPU的利用率是100%。 解决方法是:在“添加”按钮点击时,开启一个监听线程。当添加数据了后,关闭那个线程。这样线程就不会一直不停的循环监听,使CPU达到100%。    添加按钮监听器代码:    //开启监听表格状态线程   listenUpdateThread listenUpdate1=new listenUpdateThread(table, UpDt); listenUpdate1.start(); InserUpdateMenue frame = new InserUpdateMenue(UpdateMenuePanel.this); frame.setVisible(true);  counter = 0;
线程run()的方法区别就是在满足刷新条件后,加一个break。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。