java 如何判断一个线程结束
线程结束时等待也就结束了
——解决方案——————————————————–
waitforsingleobject当然可以。
或者设一全局变量,线程结束就将其置为某值。在别处读取该值,就可以判断线程是否结束了。
——解决方案——————————————————–
wait_object_0
表示这个线程已经退出了,wait_timeout是这个线程在此函数返回时候还没退出,但是设置的等待时间已经到了,wait_abandoned是所等待的对象是mutex而非thread,
如何判断java多线程是否全部执行完了,并计
思路: 把所有的线程都放到线程池里面
步骤:
1: 创建线程池 ExecutorService cachedThreadPool
2: 开启一个线程 cachedThreadPool.execute(new Runnable() {//做任务})
3.: 判断线程池里面是否执行完, cachedThreadPool.isTerminated()
while (true) {
if (cachedThreadPool.isTerminated()) { // 计算耗时
long time = System.currentTimeMillis() – start;
System.out.println(“[“+Utils.getNowTime()+”]:” + “程序结束了,总耗时:” + time + ” ms(毫秒)!\n”);
break;
}
}
Java如何判断线程池中所有任务执行完毕
Java 如何判断线程池所有任务是否执行完
shutdown
void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。
抛出:
SecurityException – 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持RuntimePermission(“modifyThread”)),或者安全管理器的 checkAccess 方法拒绝访问。
isTerminated
boolean isTerminated()
如果关闭后所有任务都已完成,则返回 true。注意,除非首先调用 shutdown 或 shutdownNow,否则 isTerminated 永不为 true。
返回:
如果关闭后所有任务都已完成,则返回 true
/**
[java] view plain copy
* 采用线程池开启多个子线程,主线程等待所有的子线程执行完毕
*/
public static void moreThread() {
try {
int threadNum = 0;
for (int i = 0; i 10; i++) {
threadNum++;
final int currentThreadNum = threadNum;
exe.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println(“子线程[” + currentThreadNum + “]开启”);
Thread.sleep(1000*10);
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println(“子线程[” + currentThreadNum + “]结束”);
}
}
});
}
System.out.println(“已经开启所有的子线程”);
exe.shutdown();
System.out.println(“shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。”);
while(true){
if(exe.isTerminated()){
System.out.println(“所有的子线程都结束了!”);
break;
}
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
System.out.println(“主线程结束”);
}
}
[java] view plain copy
子线程[1]开启
子线程[6]开启
子线程[2]开启
子线程[5]开启
子线程[9]开启
已经开启所有的子线程
子线程[3]开启
子线程[7]开启
子线程[10]开启
shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
子线程[4]开启
子线程[8]开启
子线程[6]结束
子线程[3]结束
子线程[7]结束
子线程[2]结束
子线程[1]结束
子线程[5]结束
子线程[9]结束
子线程[4]结束
子线程[10]结束
子线程[8]结束
所有的子线程都结束了!
主线程结束