• 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();
        }
    }
  • 相关阅读:
    SMTP协议原始命令码和工作原理[转]
    VC++ SMTP协议电子邮件传送剖析
    C++编译模式(转)
    IE6下select标签覆盖div的完美解决办法
    星级评论插件
    CSS Reset CSS Framework
    if判断IE浏览器的类型
    通过Prototype属性添加Array删除重复数据方法
    Javascript性能优化
    我自己的Javascript 库,封装了一些常用函数
  • 原文地址:https://www.cnblogs.com/zj0208/p/8081185.html
Copyright © 2020-2023  润新知