Thread类的join()方法

public class Demo {

    /**
     * Thread类的join()方法
     * --------------------------------
     * 1)join()
     * 2)join(long millis)
     * 3)join(long millis, int nanos)
     * 用法见代码中注释,可经过调整睡眠时间一一验证。
     */
    public static void main(String[] args) {

        // 建立一个线程组
        ThreadGroup threadGroup = new ThreadGroup("ThreadGroup1");

        // 在该线程组下建立一个线程t1
        Thread t1 = new Thread(threadGroup, new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000); // 3秒后执行
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread1 end ...");
            }
        }, "Thread1");

        // 在该线程组下建立一个线程t2
        Thread t2 = new Thread(threadGroup, new Runnable() {
            @Override
            public void run() {
                try {
                    /*
                     * t1.join();
                     * ----------------------------
                     * 等同于 t1.join(0); t1执行结束后执行t2.
                     */
                    t1.join();

                    /*
                     * t1.join(1000);
                     * ----------------------------
                     * 等最多1s直至t1死亡。
                     *     |- 若是1s内t1没死,t1执行1s后开始执行t2;
                     *     |- 若是1s内t1死了,不用等满1s直接开始执行t2;
                     */
                    // t1.join(1000);

                    /*
                     * t1.join(1000, 1000);
                     * -----------------------------------------
                     * 相似t1.join(1000);
                     *     第一个1000,单位是毫秒,第二个1000单位是纳秒 .
                     *     |- 若是第一个参数不是1000,而是0,效果等同 t1.join(0 + 1);
                     *     |- 若是第二个参数大于50万,效果等同 t1.join(1000 + 1);
                     *     |- 若是第一个参数不为0,第二个参数小于50万,效果等同 t1.join(1000);
                     *  有点延时执行的意思。可是延时的时间只能是0毫秒或1毫秒。
                     */
                    // t1.join(1000, 1000);

                    Thread.sleep(1000); // 1s后执行
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread2 end ...");
            }
        }, "Thread2");

        // 启动线程
        t1.start();
        t2.start();
    }
}
相关文章
相关标签/搜索