我有个程序设计不明白了,
main里有有3部分代码,
第一部分开出15个线程,
第二部分需要第一部分的结果进行分析,
但是我无法判断第一步开出的15个线程是否结束,我只能手工屏蔽第二和第三部分代码,然后依次执行。
高手有什么办法没,如何判断15个线程是否结束。
就是如何让主线程等待所有子线程执行完毕
public class Test {/** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub // 第一部分从正式数据库抽取数据,插入临时表 for (int i = 0; i < 15; i++) { new Thread() { public void run() { // TODO Auto-generated method stub System.out.println("在正式数据库抽取数据:" + Thread.currentThread().getName()); try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); } // 第二部分,对临时表数据进行整理 System.out.println("插入临时表进行分析"); // 结果展示 System.out.println("从临时表中读取信息,结果展示"); }
}
Part 1:
Thread[] ts = new Thread[15];
for(int i=0;i<ts.length();i++){
ts[i] = new Thread(){...}
ts[i].start();
}
for(int i=0;i<ts.length();i++){
ts[i].join();
}
...
Part2 : ....
[quote="albb0608"]join(),是目标线程.join,是让目标线程加入,当前线程等目标线程执行完,再执行,这个可顶不符合我的要求。[/quote]
通过Thread#getState() 来判断!
java.lang.Thread.State == TERMINATED 就可以!
也可以通过Profile工具查看的!
1: Thread.join()
2: CountDownLatch
3: CyclicBarrier
将创建好的线程加入数组或者List,然后遍历List,启动线程
然后遍历线程数组,调用join()等待线程执行结束,接下来的事情就可以继续做了。
请看我的文章:并发编程一波流之CyclicBarrier.
[url]http://www.iteye.com/topic/980944[/url]
有实际代码,肯定能解决你的问题。 :D
楼主使用ExecutorCompletionService,具体怎么弄,我不告诉你!呵呵!
线程池都能做的!