• 多线程之join方法


    join作用是让其他线程变为等待,我先执行。thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程(先执行指定的线程,再执行当前的线程)。比如在线程B(如主线程)中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

    public class Demo11Join {
      public static void main(String[] args) {
        JoinThread joinThread = new JoinThread();
        Thread thread1 = new Thread(joinThread, "线程1");
        Thread thread2 = new Thread(joinThread, "线程2");
        Thread thread3 = new Thread(joinThread, "线程3");
        thread1.start();
        thread2.start();
        thread3.start();
        try {
          thread1.join();
       } catch (Exception e) {
       }
        for (int i = 0; i < 5; i++) {
          System.out.println("main ---i:" + i);
       }
     }
      static class JoinThread implements Runnable {
        private Random random = new Random();
        public void run() {
          String name = Thread.currentThread().getName();
          for (int i = 0; i < 5; i++) {
            try {
              Thread.sleep(random.nextInt(10));
           } catch (InterruptedException e) {
              e.printStackTrace();
           }
            System.out.println(name + "内容是:" + i);
         }
       }
     }
    }

    其中一次执行结果如下:

    线程2内容是:0
    线程1内容是:0
    线程1内容是:1
    线程2内容是:1
    线程3内容是:0
    线程2内容是:2
    线程2内容是:3
    线程3内容是:1
    线程1内容是:2
    线程3内容是:2
    线程2内容是:4
    线程3内容是:3
    线程1内容是:3
    线程1内容是:4
    main ---i:0
    main ---i:1
    main ---i:2
    main ---i:3
    main ---i:4
    线程3内容是:4

    如果不调用线程1的join方法:

    public class Demo11Join {
      public static void main(String[] args) {
        JoinThread joinThread = new JoinThread();
        Thread thread1 = new Thread(joinThread, "线程1");
        Thread thread2 = new Thread(joinThread, "线程2");
        Thread thread3 = new Thread(joinThread, "线程3");
        thread1.start();
        thread2.start();
        thread3.start();
        for (int i = 0; i < 5; i++) {
          System.out.println("main ---i:" + i);
       }
     }
      static class JoinThread implements Runnable {
        private Random random = new Random();
        public void run() {
          String name = Thread.currentThread().getName();
          for (int i = 0; i < 5; i++) {
            try {
              Thread.sleep(random.nextInt(10));
           } catch (InterruptedException e) {
              e.printStackTrace();
           }
            System.out.println(name + "内容是:" + i);
         }
       }
     }
    }

    其中一次执行结果如下:

    main ---i:0
    main ---i:1
    main ---i:2
    main ---i:3
    main ---i:4
    线程3内容是:0
    线程2内容是:0
    线程3内容是:1
    线程2内容是:1
    线程3内容是:2
    线程1内容是:0
    线程2内容是:2
    线程2内容是:3
    线程1内容是:1
    线程2内容是:4
    线程3内容是:3
    线程1内容是:2
    线程3内容是:4
    线程1内容是:3
    线程1内容是:4
  • 相关阅读:
    C# 调用AForge类库操作摄像头
    Composer简介及使用实例
    asp.net mvc 接入美圣短信 验证码发送
    敏捷模式下携程的接口自动化平台演变
    17个Python的牛逼骚操作,你都OK吗?
    如何打造一份优雅的简历?
    谈谈少儿编程
    打基础一定要吃透这12类 Python 内置函数
    求职日记丨秋招面试零失败,我拿下宝洁、华为、壳牌等offer
    我只想找个测试岗,你却百般刁难我!
  • 原文地址:https://www.cnblogs.com/zwh0910/p/15768973.html
Copyright © 2020-2023  润新知