博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java并发编程初级篇(四):等待子线程终止
阅读量:7000 次
发布时间:2019-06-27

本文共 2088 字,大约阅读时间需要 6 分钟。

hot3.png

我们先看一个例子,在这个例子中你会发现主线程结束后,过了一段时间两个子线程才结束。

定义实现Runnable接口的线程类,模拟执行一定时间后结束。

public class MyRunnable implements Runnable{    @Override    public void run() {        System.out.printf("%s: I am start working.\n", Thread.currentThread().getName());        try {            TimeUnit.SECONDS.sleep((long) (Math.random() * 10 + 1));        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.printf("%s: I am end working.\n", Thread.currentThread().getName());    }}

定义主方法,启动两个子线程:

public class Main {    public static void main(String[] args) {        Thread thread1 = new Thread(new MyRunnable());        Thread thread2 = new Thread(new MyRunnable());        System.out.printf("%s: start two threads.\n", Thread.currentThread().getName());        thread1.start();        thread2.start();        System.out.printf("%s: end.\n", Thread.currentThread().getName());    }}

查看控制台日志,你会发现主线程先于两个子线程而结束。

main: start two threads.main: end.Thread-1: I am start working.Thread-0: I am start working.Thread-1: I am end working.Thread-0: I am end working.

当你想让主线程等待所有子线程执行结束后,再执行一段代码才结束,应该怎么做呢。Java提供了join()方法。我们重写主方法,在主方法中调用子线程的join()方法,即可让主线程进入WAITING状态并等待子线程终止后继续执行。

public class Main {    public static void main(String[] args) {        Thread thread1 = new Thread(new MyRunnable());        Thread thread2 = new Thread(new MyRunnable());        System.out.printf("%s: start two threads.\n", Thread.currentThread().getName());        thread1.start();        thread2.start();        try {            thread2.join();            thread1.join();            System.out.printf("%s: child runnable both ends.\n", Thread.currentThread().getName());        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.printf("%s: end.\n", Thread.currentThread().getName());    }}

查看控制台日志,你会发现主线程在等待两个子线程终止之后才继续执行。

main: start two threads.Thread-0: I am start working.Thread-1: I am start working.Thread-0: I am end working.Thread-1: I am end working.main: child runnable both ends.main: end.

 

转载于:https://my.oschina.net/nenusoul/blog/792772

你可能感兴趣的文章
手机通讯录,地图列表一系列实现
查看>>
最流行的5个前端框架对比
查看>>
hdoj 2795 Billboard 【线段树 单点更新 + 维护区间最大值】
查看>>
[置顶] MySQL -- 创建函数(Function
查看>>
视频云的选型调研
查看>>
android中使用百度定位sdk实时的计算移动距离
查看>>
android:Cordova Android, hello Cordova ,PhoneGap android
查看>>
MySQL 性能调优的10个方法
查看>>
http协议的再次理解
查看>>
hdu 2089 不要62 【数位DP】
查看>>
Android 利用Gson生成或解析json
查看>>
mybatis 之resultType="Map"
查看>>
关于redis中SDS简单动态字符串
查看>>
WordPress主循环(The Loop)函数have_posts(),the_post()详解
查看>>
【Java学习笔记之八】JavaBean中布尔类型使用注意事项
查看>>
jQuery核心函数——(一)
查看>>
License友好的前端组件合集
查看>>
OCR 基本知识
查看>>
Oracle中对数字加汉字的排序(完好)
查看>>
linux kvm虚拟机使用
查看>>