zoukankan      html  css  js  c++  java
  • Java多线程,判断其他线程是否结束的方法

    方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态。

    线程启动后,只要没有运行完毕,都会返回true。

    【注】如果只是要等其他线程运行结束之后再继续操作,可以执行t.join(),即:在t执行完毕前挂起。

    方法2:通过Thread.activeCount()方法判断当前线程的线程组中活动线程的数目,为1时其他线程运行完毕。

    方法3:通过java.util.concurrent.Executors中的方法创建一个线程池,用这个线程池来启动线程。启动所有要启动的线程后,执行线程池的shutdown()方法,即在所有线程执行完毕后关闭线程池。然后通过线程池的isTerminated()方法,判断线程池是否已经关闭。线程池成功关闭,就意味着所有线程已经运行完毕了。

    示例代码:

     1 import java.util.concurrent.ExecutorService;  
     2 import java.util.concurrent.Executors;  
     3 
     4 public class Test {  
     5   
     6     public static void main(String args[]) throws InterruptedException {  
     7         ExecutorService exe = Executors.newFixedThreadPool(50);  
     8         for (int i = 1; i <= 5; i++) {  
     9             exe.execute(new SubThread(i));  
    10         }  
    11         exe.shutdown();  
    12         while (true) {  
    13             if (exe.isTerminated()) {  
    14                 System.out.println("结束了!");  
    15                 break;  
    16             }  
    17             Thread.sleep(200);  
    18         }  
    19     }  
    20 }

    一个思路:

    给所有的线程加上同步(同一个锁),主线程在启动其他所有线程后wait()。每个线程运行结束后,执行notify()方法。设定一个值为其他线程数量的int计数器count,写一个while循环,循环条件为count-->0,循环内容为wait()。则所有线程运行结束后正好while循环结束。
    
    致命缺陷:如果几个线程同时运行结束,有可能在主线程还没运行时,已经执行了好几次notify()方法。如果这样的话,while循环就永远不会结束了,主线程一直wait()下去。
    一个思路
  • 相关阅读:
    导入导出
    封装本地文件路径
    读书书单
    Spring源码阅读-BeanFactory体系结构分析
    Spring源码阅读-ApplicationContext体系结构分析
    Spring源码阅读-IoC容器解析
    Spring源码阅读环境搭建
    【spring实战第五版遇到的坑】第14章spring.cloud.config.uri和token配置项无效
    【spring实战第五版遇到的坑】4.2.3中LDAP内嵌服务器不启动的问题
    【spring实战第五版遇到的坑】3.2中配置关系映射时,表名和3.1中不一样
  • 原文地址:https://www.cnblogs.com/cage666/p/7482648.html
Copyright © 2011-2022 走看看