zoukankan      html  css  js  c++  java
  • Java主线程等待所有子线程执行完毕再执行解决办法(转)

    方法一:

    Thread.join()方法,亲测可行,thread.join()方法

    [java] view plain copy
     
    1. Vector<Thread> ts = new Vector<Thread>();  
    2.         for (int i = 0; i < 200; i++) {  
    3.             Thread t = new Thread(new Runnable() {  
    4.                 @Override  
    5.                 public void run() {  
    6.                     Counter.inc();  
    7.                 }  
    8.             });  
    9.             ts.add(t);  
    10.             t.start();  
    11.         }  
    12.         for (Thread t : ts) {  
    13.             try {  
    14.                 t.join();  
    15.             } catch (InterruptedException e) {  
    16.                 // TODO Auto-generated catch block  
    17.                 e.printStackTrace();  
    18.             }  
    19.         }  
    20.           
    21.         System.out.println("----------" + Counter.count);  


    (全部代码见上一篇文章)

    这个循环中的join的意思是:子线程排好队,欢迎新同学main线程,main线程对着排好队的他们说,我站你后边,我站你后边,我站你后边。。。。(ts.size()次)。然后站到最后一个的后面了。恩、

    方法二:

    用线程池。

    代码:

    [java] view plain copy
     
    1. ExecutorService threadPool = Executors.newScheduledThreadPool(10);  
    2.         ExecutorService threadPool = Executors.newCachedThreadPool();  
    3. for (int i = 0; i < 200; i++) {  
    4.     threadPool.execute(new Runnable() {  
    5.   
    6.         @Override  
    7.         public void run() {  
    8.             chi.inc();  
    9.         }  
    10.     });  
    11. }  
    12. threadPool.shutdownNow();  
    13. try {  
    14.     threadPool.awaitTermination(3, TimeUnit.MICROSECONDS);  
    15. catch (InterruptedException e) {  
    16.     e.printStackTrace();  
    17. }  
    18. System.out.println("------" + chi.count);  

    Executors是个工厂,(工厂模式),创建出几种不同类别的线程池。这里我用ScheduledThreadPool。(因为好使,注释掉的那种不知为什么不管用)。

    然后用shutdownNow(),这个方法是马上停止(试图)正在执行的任务,线程池进入STOP状态,不再开启正在等待的线程。

    对比的,shutdown()方法是阻止等待中的进程开启,等待所有正在执行的进程完成。

  • 相关阅读:
    mysq 日期相减
    说说时间观与时间管理——北漂18年(71)
    ionic之切换开关
    ionic之单选框
    SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录
    14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读
    14.5.2.2 autocommit, Commit, and Rollback
    14.5.2 事务隔离级别
    对于唯一索引使用唯一条件搜索, InnoDB 只锁定找到的index record,不是它之前的区间
    mysql explain 解释
  • 原文地址:https://www.cnblogs.com/panxuejun/p/7811105.html
Copyright © 2011-2022 走看看