如何让线程池中的线程执行完毕后,主线程再开始执行

youngshaver 2010-06-10 08:29:10
如何让线程池中的线程执行完毕后,主线程再开始执行?
...全文
482 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2010-06-10
  • 打赏
  • 举报
回复
可以两个方法配合循环结构来使用。
ExecutorService.awaitTermination(long timeout, TimeUnit unit);
ExecutorService.isTerminated();
冰思雨 2010-06-10
  • 打赏
  • 举报
回复
线程池对象本身就有相关的方法。
当然,可以考虑使用一下传说中的障栅技术。
sgzlove2007 2010-06-10
  • 打赏
  • 举报
回复
请研究下Thread.join();这个方法
youngshaver 2010-06-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lacus87 的回复:]
试试看,我这边试可以让main启动所有线程之后一直等待到最后才执行


Java code

public class ThreadB {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
Thread t = new Thread(new……
[/Quote]

如果使用线程池,怎么实现呢?
lacus87 2010-06-10
  • 打赏
  • 举报
回复
还是有点问题,不稳定,估计只能支持main+一个额外的线程。
唉,线程不熟啊
youngshaver 2010-06-10
  • 打赏
  • 举报
回复
对不起,上面的问题有些歧义
我提的问题本意就是让主线程先开始执行,然后主线程创建线程池,池中的线程开始执行,等线程池中的线程执行完毕后,主线程再继续向下执行
lacus87 2010-06-10
  • 打赏
  • 举报
回复
试试看,我这边试可以让main启动所有线程之后一直等待到最后才执行


public class ThreadB {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
Thread t = new Thread(new MyRunnable());
t.start();
}
synchronized ("hello") {
try {
"hello".wait();
} catch (InterruptedException e) {
e.printStackTrace();
}

}
//继续做主线程的业务
for (int i = 0; i < 1000; i++) {
System.out.println("main----->" + i);
}
}
}

class MyRunnable implements Runnable {

@Override
public void run() {
synchronized ("hello") {
for (int i = 1; i <= 1000; i++) {
System.out.println(Thread.currentThread().getName() + "------>"
+ i);
"hello".notify();
}
}
}
}




youngshaver 2010-06-10
  • 打赏
  • 举报
回复
而且在main函数中是不能使用try{wait();}catch(Exception e){}的
youngshaver 2010-06-10
  • 打赏
  • 举报
回复
谢谢yueguangkai001

正如你说的,主程序肯定是要先执行的,然后让线程池启动

如何让线程wait()呢?

只是单纯的使用try{wait();}catch(Exception e){}吗?
yueguangkai001 2010-06-10
  • 打赏
  • 举报
回复
就我理解,主线程是程序的入口,无论如何都应该首先执行,不过你可以执行主线程的时候将线程池中的线程开启,让主线程wait(),执行完线程池中的线程后,唤醒主线程

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧