Java主线程等待所有子线程执行完毕再执行解决办法(转)
2017-11-09 19:47
387 查看
方法一:
Thread.join()方法,亲测可行,thread.join()方法
[java] view plain copy
Vector<Thread> ts = new Vector<Thread>();
for (int i = 0; i < 200; i++) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
Counter.inc();
}
});
ts.add(t);
t.start();
}
for (Thread t : ts) {
try {
t.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("----------" + Counter.count);
(全部代码见上一篇文章)
这个循环中的join的意思是:子线程排好队,欢迎新同学main线程,main线程对着排好队的他们说,我站你后边,我站你后边,我站你后边。。。。(ts.size()次)。然后站到最后一个的后面了。恩、
方法二:
用线程池。
代码:
[java] view plain copy
ExecutorService threadPool = Executors.newScheduledThreadPool(10);
ExecutorService threadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 200; i++) {
threadPool.execute(new Runnable() {
@Override
public void run() {
chi.inc();
}
});
}
threadPool.shutdownNow();
try {
threadPool.awaitTermination(3, TimeUnit.MICROSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("------" + chi.count);
Executors是个工厂,(工厂模式),创建出几种不同类别的线程池。这里我用ScheduledThreadPool。(因为好使,注释掉的那种不知为什么不管用)。
然后用shutdownNow(),这个方法是马上停止(试图)正在执行的任务,线程池进入STOP状态,不再开启正在等待的线程。
对比的,shutdown()方法是阻止等待中的进程开启,等待所有正在执行的进程完成。
Thread.join()方法,亲测可行,thread.join()方法
[java] view plain copy
Vector<Thread> ts = new Vector<Thread>();
for (int i = 0; i < 200; i++) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
Counter.inc();
}
});
ts.add(t);
t.start();
}
for (Thread t : ts) {
try {
t.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("----------" + Counter.count);
(全部代码见上一篇文章)
这个循环中的join的意思是:子线程排好队,欢迎新同学main线程,main线程对着排好队的他们说,我站你后边,我站你后边,我站你后边。。。。(ts.size()次)。然后站到最后一个的后面了。恩、
方法二:
用线程池。
代码:
[java] view plain copy
ExecutorService threadPool = Executors.newScheduledThreadPool(10);
ExecutorService threadPool = Executors.newCachedThreadPool();
for (int i = 0; i < 200; i++) {
threadPool.execute(new Runnable() {
@Override
public void run() {
chi.inc();
}
});
}
threadPool.shutdownNow();
try {
threadPool.awaitTermination(3, TimeUnit.MICROSECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("------" + chi.count);
Executors是个工厂,(工厂模式),创建出几种不同类别的线程池。这里我用ScheduledThreadPool。(因为好使,注释掉的那种不知为什么不管用)。
然后用shutdownNow(),这个方法是马上停止(试图)正在执行的任务,线程池进入STOP状态,不再开启正在等待的线程。
对比的,shutdown()方法是阻止等待中的进程开启,等待所有正在执行的进程完成。
相关文章推荐
- Java主线程等待所有子线程执行完毕再执行解决办法集
- Java主线程等待所有子线程执行完毕再执行解决办法集
- Java主线程等待所有子线程执行完毕再执行解决办法
- Java主线程等待所有子线程执行完毕再执行解决办法集
- Java主线程等待所有子线程执行完毕再执行解决办法集
- Java主线程等待所有子线程执行完毕再执行解决办法
- Java多线程--让主线程等待所有子线程执行完毕在执行
- Java多线程--让主线程等待所有子线程执行完毕(转)
- java主线程等待所有子线程执行完毕在执行(常见面试题)
- Java多线程--让主线程等待所有子线程执行完毕
- java主线程等待所有子线程执行完毕在执行
- java主线程等待所有子线程执行完毕在执行(常见面试题)
- [置顶] [转]Java多线程--让主线程等待所有子线程执行完毕
- Java多线程--让主线程等待所有子线程执行完毕
- Java多线程--让主线程等待所有子线程执行完毕
- java主线程等待所有子线程执行完毕在执行(常见面试题)
- Java多线程--让主线程等待所有子线程执行完毕
- Java多线程--让主线程等待所有子线程执行完毕
- java多线程实现主线程等待所有子线程执行完毕
- Java多线程--让主线程等待所有子线程执行完毕【转】