Thread.join()的使用

来源:互联网 发布:Python 异常 编辑:程序博客网 时间:2024/05/23 23:41

       如果一个线程A执行了B.join()语句,其含义是:当前线程A等待B线程终止之后才从B.join()返回。线程Thread除了提供join()方法之外,还提供了join(long millis)和join(longmillis,int nanos)两个具备超时特性的方法。这两个超时方法表示,如果线程thread在给定的超时时间里没有终止,那么将会从该超时方法中返回。

/** *Thread.join()的使用 */package com.lbbywyt.concurrent;import java.util.concurrent.TimeUnit;/** * @author libaobao *  */public class Join {    /**     * @param args     * @throws InterruptedException     */    public static void main(String[] args) throws InterruptedException {        Thread previous = Thread.currentThread();        for (int i = 0; i < 10; i++) {            // 每个线程拥有前一个线程的引用,需要等待前一个线程终止,才能从等待中返回            Thread thread = new Thread(new JoinThread(previous), String.valueOf(i));            thread.start();            previous = thread;        }        System.out.println(Thread.currentThread().getName() + " terminate.");    }    static class JoinThread implements Runnable {        private Thread thread;        public JoinThread(Thread thread) {            this.thread = thread;        }        public void run() {            try {                thread.join();                TimeUnit.SECONDS.sleep(1);            } catch (InterruptedException e) {            }            System.out                    .println(Thread.currentThread().getName() + " terminate.");        }    }}

上述代码创建了10个线程,编号0~9,每个线程调用前一个线程的join()方法,也就是线程0结束了,线程1才能从join()方法中返回,而线程0必须等待main线程结束之后才能执行。

原创粉丝点击