Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26267570
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类:

2010-06-06 15:23:48

处理大文件数据量的两种方法,其实这两次方法的本质是一样的,就是为了降低CPU。
第一种是在我们在遍历循环的时候,在循环遍历到一定数量的时候,进行Thread.sleep(5)操作,带该线程睡眠片刻

Java代码
  1. For (int I =0 ;I < list.size();i++)  
  2. {  
  3.     //…业务处理  
  4.      If (3000 == i)  
  5. {  
  6.    smt.exebatch()
  7.    read.flush();        
  8.    //一些清空操作
  9.    Thread.sleep(5)   ;
  10.      }  
  11. }  


强制CPU暂时不处理该线程。

第二种方法就是采用流控的方式,流控的原理就是我们有一个初始量,循环过程中我们累加这个量,当达到一定量的时候,该线程进行wait()操作,同时我们 启动一个定时器,定时间周期对该变量进行清零操作,并唤醒该线程。其中可能会出现两种情况,一是我们定时器的清零操作还没到,累积量就已经到了,那么该线 程就会处在等待状态,等待清零时间到,唤醒线程。二是累积量还没到,清零时间就到了,对线程进行清零,那么这个时候线程会一直处在一个运行状态,如果这个 时候CPU使用率很高的话,就达不到我们需要的效果,所以该方式的控制就需要实际调整定时器的扫描周期、记累积量的值设定。实际过程中需要调整两参数。


没做细究,感觉使用第一种方案比较好点。

阅读(731) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~