JAVA线程引起的CPU满负载
做项目时,第一次遇到了CPU满负荷运作的情况,CPU利用率100%。虽然遇到了问题,但是觉得自己写程序居然都能让CPU满负荷运行,自己的水平已经到了需要考虑软件的效率问题的阶段了。这比以前写的完全不会让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。


监听线程的代码如下 //刷新表格进程 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。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 大量线程没结束导致cpu跑满的排查分析
- 下一篇: meta标签的作用及整理