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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高梦晓 中级黑马   /  2013-4-17 15:37  /  958 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码如下:
  1. //开始
  2. for (int i = 0; i < fList.size(); i++) {
  3.      
  4.     final List<FndMenuEntriesIntDto> sortList = fndMenuEntriesIntDao.getListByMenuId(fList.get(i).getMenuId(), versionId);

  5.             new Thread(new Runnable() {
  6.                 @Override
  7.                 //线程1
  8.                 public void run() {               
  9.                     for (int i = 0; i < sortList.size(); i++) {
  10.                         doSomeThing1();
  11.                     }
  12.                 }
  13.             }).start();

  14.             new Thread(new Runnable() {
  15.                 @Override
  16.                 //线程2
  17.                 public void run() {
  18.                     for (int i = 0; i < sortList.size(); i++) {
  19.                         doSomeThing2();
  20.                     }
  21.                 }
  22.             }).start();
  23.         }

  24. }
复制代码
doSomeThing1();和doSomeThing2();里执行的业务不一样,所需的时间也不同。
开始的循环处会等线程1和线程2都执行完再执行下一次循环码?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 偏執旳、靑春 于 2013-4-17 21:43 编辑

我有一个办法实现一下,你可以在执行时间的短的地方加一个延时。
//开始
for (int i = 0; i < fList.size(); i++) {
     
    final List<FndMenuEntriesIntDto> sortList = fndMenuEntriesIntDao.getListByMenuId(fList.get(i).getMenuId(), versionId);

            new Thread(new Runnable() {
                @Override
                //线程1
                public void run() {               
                    for (int i = 0; i < sortList.size(); i++) {
                        doSomeThing1();
                        Thread.sleep(3000);
                    }
                }
            }).start();

            new Thread(new Runnable() {
                @Override
                //线程2
                public void run() {
                    for (int i = 0; i < sortList.size(); i++) {
                        doSomeThing2();
                    }
                }
            }).start();
        }

}。
当然这个方法不太实际。时间容易错乱。
2.可以用join方法试一试
t1.start();
t2.start();
t1.join();//抢夺CPU执行权,他结束后主线程才恢复,但是t2还在运行。t2是否结束与t1没有关系,他只能抢主线程的执行权
t2.join();
///////////////////////////////用一个while(true)循环。
3.还可以用t1.isAlive判断下,具体的这里就不多说啦!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马