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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Chelsea_Lampard 中级黑马   /  2013-5-9 20:53  /  1430 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Chelsea_Lampard 于 2013-5-11 01:20 编辑
  1. int ThreadCount = 20;
  2.         ExecutorService service = Executors.newFixedThreadPool(ThreadCount);
  3.         final ReentrantLock lock = new ReentrantLock();
  4.         for (int j = start; j < n; j++) {
  5.             Future result = service.submit(new Handler(urls[j], j, n, lock));
  6.             if (j > 0 && j % ThreadCount == 0) {
  7.                 while (true) {
  8.                     // 如果有任务完成, 处理下一个任务
  9.                     if (result.isDone()) {
  10.                         break;
  11.                     }
  12.                 }
  13.             }
  14.         }
复制代码

我要实现的功能是;

创建一个线程池来处理任务 如果线程池里面没有一个任务完成时候, 则不接受新任务 反之, 接受新任务。

问题1:判断线程池里面是否有任务完成; 我自己写的 while(true) ... 检查是否有任务完成,感觉不是很理想,               有没有好的方法来检查是否有任务完成?

问题2:

  1. service.shutdown();
  2. if (!service.awaitTermination(60, TimeUnit.SECONDS)) {
  3.    service.shutdownNow();
  4.    // 如果这里关闭数据库,总是会出现任务没有全部完成,就给关闭了,导致数据无法写入到数据库
  5.    //Db.getInstance().close();
  6. }
复制代码
怎样判断所有任务是否都完成?

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

1 个回复

倒序浏览
线程池:
     shutdown()和shutdownNow()的区别
|--假设你有10个任务和具有三个线程 的线程池
   shutdown()会执行完10个任务后结束线程管理,释放内存
  shundownNow()只会执行三个任务就结束.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马