首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

急java多线程的有关问题

2013-07-20 
急急急。。。在线等~~~java多线程的问题本帖最后由 sarahsss 于 2013-07-07 18:12:15 编辑有一个主线程main,

急急急。。。在线等~~~java多线程的问题
本帖最后由 sarahsss 于 2013-07-07 18:12:15 编辑 有一个主线程main,每次从数据库中取1000条数据,分给5个线程(每个线程200条),进行数据分析。等待5个线程运行结束了,又取1000条,一次循环。代码如下:


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几条,如此循环。但是日志文件中没有捕获到异常。 不知道是哪里出问题了。。。。求大神帮忙!~ Java


[解决办法]
WebPageAnalyzer形参分别什么意思?
如楼主所说,是每条线程自己没有完成200条的分析任务的话,最好把分析逻辑代码贴出来,可能是那中间出现了条件中断,上面贴出来的代码只是接收分析任务的部分代码,无法准确判断原因。
[解决办法]
Executors.newCachedThreadPool();API中有这样的描述:"从缓存中移除那些已有 60 秒钟未被使用的线程"。
很有嫌疑
[解决办法]
有时间的话,可以先把分析线程改成简单sleep,跑一段时间,看看是否一样

热点排行