A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁永志 中级黑马   /  2013-7-14 19:22  /  1004 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-15 17:58 编辑

有一个主线程main,每次从数据库中取1000条数据,分给5个线程(每个线程200条),进行数据分析。等待5个线程运行结束了,又取1000条,一次循环。代码如下:Java code
  1.         
  2. public class WebPageAnalyzer implements Runnable{
  3.         int start =0;int end = 0;int index = 0;
  4.          public  DataDao da = DataDao.createDao();
  5.         
  6.          public static  List<Page> pageList;
  7.                  
  8. .......
  9.    public static void main(String[] args)
  10.    {
  11.                         
  12.                                 pageList = wpa.da.getUnAnalysedPages();
  13.                                 if(pageList.size()>0)
  14.                                 {
  15.                                         System.out.println(new Date()+"  Found " + pageList.size() + " unanalynized pages.");
  16.                                         System.out.println("Start analysising for " +pageList.size() + " pages ...");
  17.                                         try {  
  18.                                               ExecutorService executorService = Executors.newCachedThreadPool();  

  19.                                               for (int i =0; i < 5; i++) {
  20.                                                 executorService.execute(new WebPageAnalyzer(i*200,Math.min((i+1)*200,pageList.size()),i+1));
  21.                                                 
  22.                                                 if((i+1)*200>pageList.size()){break;}
  23.                                               }  

  24.                                               executorService.shutdown();   
  25.                                       
  26.                                               while (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { System.out.println("还有线程在忙活~~wait!!!!");}
  27.                                               System.out.println("Finished all threads");
  28.                                             } catch (Exception e) {
  29.                                                     e.printStackTrace();
  30.                                             }  
  31.                                 }
  32. }
复制代码
其中pagelist是静态变量,因为我认为5个线程只是读取pagelist的不同段的数据,并没有写入操作,所以没有同步。
程序在运行了3,4天以后,就出现了异常:每次取1000条,每个线程只分析了10几条就退出了,主线程又取1000条,每个线程又只分析了10几条,如此循环。但是日志文件中没有捕获到异常。 不知道是哪里出问题了。

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

2 个回复

倒序浏览
WebPageAnalyzer形参分别什么意思?
如楼主所说,是每条线程自己没有完成200条的分析任务的话,最好把分析逻辑代码贴出来,可能是那中间出现了条件中断,上面贴出来的代码只是接收分析任务的部分代码,无法准确判断原因。
回复 使用道具 举报
楼主...写代码一点不假注释看起来真吃不消。读你的逻辑就不容易,再找逻辑中出错的很难的..
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马