• 主线程,子线程,和join()


    在网上看到一个例子

    public class JoinTester01 implements Runnable {
    
        private String name;
    
        public JoinTester01(String name) {
        this.name = name;
        }
    
        public void run() {
        System.out.printf("%s begins: %s
    ", name, new Date());
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.printf("%s has finished: %s
    ", name, new Date());
        }
    
        public static void main(String[] args) {
        Thread thread1 = new Thread(new JoinTester01("One"));
        Thread thread2 = new Thread(new JoinTester01("Two"));
        thread1.start();
        thread2.start();
        
        /*try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/
        
        System.out.println("Main thread is finished");
        }
    
    }
    

      输出结果是

    Main thread is finished                                                                                                                 
    OneWed Mar 01 09:04:52 UTC 2017                                                                                                         
    TwoWed Mar 01 09:04:52 UTC 2017                                                                                                         
    TwoWed Mar 01 09:04:52 UTC 2017                                                                                                         
    OneWed Mar 01 09:04:52 UTC 2017 
    开始不相信为什么main()的主线程都完成了,子线程还能执行,自己试了一下发现真的是这样。
    原来,主线程是一个非守护线程,所以主线程执行完了并不影响其他子线程,其他子线程依然该怎么运行就还怎么运行。主线程和子线程优先级一样但是主线程会先抢占CPU,先执行。所以就会出现这样的结果。
    如果加上join代码部分,结果就会使真阳:
    TwoWed Mar 01 09:10:39 UTC 2017                                                                                                         
    OneWed Mar 01 09:10:39 UTC 2017                                                                                                         
    TwoWed Mar 01 09:10:40 UTC 2017                                                                                                         
    OneWed Mar 01 09:10:40 UTC 2017                                                                                                         
    Main thread is finished
    thread1.join()的意思就相当于从现在开始,thread1这个线程就接在main()线程后面执行了,只有执行完thread1线程之后才会继续主线程。
  • 相关阅读:
    Qt 配置fakevim
    CentOS安装Ruby组件
    Linux shell 操作 postgresql,并设置crontab任务
    修改win7锁定界面背景
    Ubuntu安装Redis
    Java 向SQL Server插入文件数据
    用VMware vSphere Client客户端登陆vsphere5提示错误
    DD应用实例
    shell初学
    deepin2014.1快捷键
  • 原文地址:https://www.cnblogs.com/TaoChiangBlog/p/6485224.html
Copyright © 2020-2023  润新知