本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明:

1、使用Thread的join()方法,join()方法会阻塞主线程继续向下执行。

2、使用Java.util.concurrent中的CountDownLatch,是一个倒数计数器。初始化时先设置一个倒数计数初始值,每调用一次countDown()方法,倒数值减一,他的await()方法会阻塞当前进程,直到倒数至0。

join方式代码如下:

package com.test.thread;

import java.util.ArrayList;

import java.util.List;

public class MyThread extends Thread

{

public MyThread(String name)

{

this.setName(name);

}

@Override

public void run()

{

System.out.println(this.getName() + " staring...");

System.out.println(this.getName() + " end...");

}

/**

* @param args

*/

public static void main(String[] args)

{

System.out.println("main thread starting...");

List list = new ArrayList();

for (int i = 1; i <= 5; i++)

{

MyThread my = new MyThread("Thrad " + i);

my.start();

list.add(my);

}

try

{

for (MyThread my : list)

{

my.join();

}

}

catch (InterruptedException e)

{

e.printStackTrace();

}

System.out.println("main thread end...");

}

}

运行结果如下:

main thread starting...

Thrad 2 staring...

Thrad 2 end...

Thrad 4 staring...

Thrad 4 end...

Thrad 1 staring...

Thrad 1 end...

Thrad 3 staring...

Thrad 3 end...

Thrad 5 staring...

Thrad 5 end...

main thread end...

CountDownLatch方式代码如下:

package com.test.thread;

import java.util.concurrent.CountDownLatch;

public class MyThread2 extends Thread

{

private CountDownLatch count;

public MyThread2(CountDownLatch count, String name)

{

this.count = count;

this.setName(name);

}

@Override

public void run()

{

System.out.println(this.getName() + " staring...");

System.out.println(this.getName() + " end...");

this.count.countDown();

}

/**

* @param args

*/

public static void main(String[] args)

{

System.out.println("main thread starting...");

CountDownLatch count = new CountDownLatch(5);

for (int i = 1; i <= 5; i++)

{

MyThread2 my = new MyThread2(count, "Thread " + i);

my.start();

}

try

{

count.await();

}

catch (InterruptedException e)

{

e.printStackTrace();

}

System.out.println("main thread end...");

}

}

运行结果如下:

main thread starting...

Thread 2 staring...

Thread 2 end...

Thread 4 staring...

Thread 4 end...

Thread 1 staring...

Thread 1 end...

Thread 3 staring...

Thread 3 end...

Thread 5 staring...

Thread 5 end...

main thread end..

转自http://blog.csdn.net/nms312/article/details/30115055

java 主线程等待_Java实现主线程等待子线程相关推荐

  1. Java多线程面试题:子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50次

    近在学习多线程,特贴在这里,并附上自己所作答案(参考与张孝祥老师的方法). 题目如下: 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, 接着再回到主线程又循环100,如此循环50 ...

  2. 多线程学习--案例-子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次

    子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序. package Demo4; public class ThreadTe ...

  3. java多线程交替打印_java多线程 更优雅的实现线程同步:交替打印A、B LockSupport实现...

    一 问题概述 线程或者进程之间有两种关系 同步和互斥,我们通常实现同步方法是使用线程的等待唤醒机制,而等待唤醒机制的使用是建立在互斥的继承上的.但是同步线程并不一定是必须要实现互斥的.比如一个线程打印 ...

  4. java中主线程首先执行_java经典面试题:子线程先运行30次主线程,主线程40次,如此循环50次?...

    最近偶遇这道题,网上相似的题都是循环次数不一样.然而我百度搜到的论坛或者博客感觉都不太对,运行有穿插.请给出正确结果. 我们假使所有人都引入了业务对象. 并且我有疑问?感觉题目本意不是new Thre ...

  5. 主线程等待一个 无阻塞函数 死循环子线程的安全退出

    子线程: procedure TreadThread.Execute; begin    inherited;    FreeOnTerminate := True;    while not Ter ...

  6. java for循环 等待_java – 主题:忙等待 – 空循环

    参见英文答案 > Is this starvation?                                    2个 在我们的大学课程中,我们学习了Threads并使用" ...

  7. java 条件 等待_java – 如何唤醒等待相同条件的所有线程?

    我有以下情况.几个线程正在等待相同的条件.当得到通知时,所有应该停止等待,更改标志并返回对象: public Object getObject(){ lock.lock(); try { while ...

  8. java暂停的方法_Java使用join方法暂停当前线程

    目标线程的join方法暂停当前线程,直到目前线程完成(从run()方法返回),供大家参考,具体内容如下 Java代码: package Threads; import java.io.IOExcept ...

  9. java 监听配置文件_java读取系统Properties配置文件利用线程实时监控配置文件变化...

    package util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...

最新文章

  1. Go语言中的匿名函数和闭包的样子
  2. who is the one who actually know the essential things in life?
  3. python 中用什么键缩进 —— tab 还是空格?
  4. vue项目如何放到服务器上,Vue项目怎么上传到云服务器
  5. 利益相关者软件工程_如何向利益相关者解释用户体验的重要性
  6. 自动添加html结束标志,HTML:包含或排除可选的结束标记?
  7. fastdfs java token_fastdfs-client-java操作fastdfs
  8. Sharing A Powerful Tool For Calculate Code Lines
  9. android开源SlidingMenu使用
  10. Python学习入门基础教程(learning Python)--6 Python下的list数据类型
  11. linux vnc 蓝屏,【典型问题分析 之 蓝屏问题】
  12. opencv 基于haar特征的级联分类器实现图象识别原理
  13. 代码背景护眼色设置RGB
  14. 微信小程序实现全局登陆状态
  15. 向量设计丨导师简介丨客户案例丨商业活动丨跨界合作
  16. Chrome断点JS寻找淘宝签名sign
  17. 火狐浏览器打开书签 不要在新页面打开书签
  18. Day 3 Linux(目录篇 、文件操作篇 、压缩解压相关命令, 编辑器vi 、编译器gcc 、调试器gdb、 makefile工程管理器初学)
  19. java dh_java DH加密算法备忘
  20. VPS和云服务器的区别

热门文章

  1. 阿里巴巴的AI算法程序媛是怎样的一种存在?
  2. 高速通道-冗余物理专线接入-健康检查配置
  3. 你们关心十三香不香,我却关心背后的质检稳不稳
  4. SQL分页查询方案的性能对比
  5. VMware和NVIDIA推出新一代混合云架构
  6. 邱跃鹏:软硬件一体化、Serverless、智能化是云计算三大趋势
  7. 拿来就能用!行,这本 Python 书彻底火了!
  8. 企业大咖教你解决Kubernetes的挑战
  9. mac安装python环境教程_python mac下安装虚拟环境的图文教程
  10. 字符串反转python_Python实现字符串反转的几种方法