zoukankan      html  css  js  c++  java
  • 主线程,子线程,和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线程之后才会继续主线程。
  • 相关阅读:
    【算法18】重排数组元素使得所有的奇数位于所有偶数之前
    php函数ob_start()、ob_end_clean()、ob_get_contents()
    php代码调试
    判断文件存在是用file_exists 还是 is_file
    ubuntu屏幕截图工具:scrot,可截鼠标拖曳的矩形区域图形
    mysql常用的技巧
    用户角色权限设计
    解决ubuntu耳机和音箱同时发音
    SSH免密码登录
    IE, Firefox下,checkbox的钩钩一旦勾上,画面再刷新,钩钩还是勾上的解决方案
  • 原文地址:https://www.cnblogs.com/TaoChiangBlog/p/6485224.html
Copyright © 2011-2022 走看看