本帖最后由 杨兴庭 于 2013-7-15 17:58 编辑
有一个主线程main,每次从数据库中取1000条数据,分给5个线程(每个线程200条),进行数据分析。等待5个线程运行结束了,又取1000条,一次循环。代码如下:Java code
-
- public class WebPageAnalyzer implements Runnable{
- int start =0;int end = 0;int index = 0;
- public DataDao da = DataDao.createDao();
-
- public static List<Page> pageList;
-
- .......
- public static void main(String[] args)
- {
-
- pageList = wpa.da.getUnAnalysedPages();
- if(pageList.size()>0)
- {
- System.out.println(new Date()+" Found " + pageList.size() + " unanalynized pages.");
- System.out.println("Start analysising for " +pageList.size() + " pages ...");
- try {
- ExecutorService executorService = Executors.newCachedThreadPool();
- for (int i =0; i < 5; i++) {
- executorService.execute(new WebPageAnalyzer(i*200,Math.min((i+1)*200,pageList.size()),i+1));
-
- if((i+1)*200>pageList.size()){break;}
- }
- executorService.shutdown();
-
- while (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { System.out.println("还有线程在忙活~~wait!!!!");}
- System.out.println("Finished all threads");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
复制代码 其中pagelist是静态变量,因为我认为5个线程只是读取pagelist的不同段的数据,并没有写入操作,所以没有同步。
程序在运行了3,4天以后,就出现了异常:每次取1000条,每个线程只分析了10几条就退出了,主线程又取1000条,每个线程又只分析了10几条,如此循环。但是日志文件中没有捕获到异常。 不知道是哪里出问题了。
|