转:关于安卓多线程while(true)方法占用CPU高的原因及其解决方法

 由于项目需要用到安卓多线程操作,结果开了四条线程,下载到平板一直很卡,CPU占用率暴涨。于是开始查找原因,发现是线程run()方法里的while(true)导致的,

下图是为解决时开启一条while(true)线程的CPU占用率,很明显,就开了一条,电脑模拟器CPU就占用了43%,开两条直接90%导致电脑卡死所以这个问题很严重。

 

这是解决后的CPU占用率,从图中可知,开启了25条线程也就占用了不到34%,所以效果很明显!

 

 

这是解决方法:

只需在while(true)循环内加上一句Thread.sleep(1)即可解决该问题。也就是延时1ms。不要小看这1ms,要知道CPU是以纳秒级单位运转的!纳秒,时间单位。一秒10亿分之一!

用代码解释如下:

public void run(){

super.run();

      while(true){
               //你的代码
       }

}
改进之后:
public void run(){

super.run();

       while(true){

         try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
          //你的代码
    }

}

 

posted @ 2017-04-11 19:32  夜行过客  阅读(2417)  评论(0编辑  收藏  举报