zoukankan      html  css  js  c++  java
  • Java并发编程--多线程中的join方法详解

    Java Thread中, join()方法主要是让调用该方法的thread在完成run方法里面的部分后, 再执行join()方法后面的代码

    例如:定义一个People类,run方法是输出姓名年龄。

    class People implements Runnable{
        public String name ;
        public int age;
        public People(String name , int age){
            this.name =name;
            this.age = age;
        }
        @Override
        public void run() {
            
            System.out.println("开始输出");
            System.out.println("姓名"+name);
            System.out.println("年龄"+age);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("========结束=========");
            
        }
        
    }

    如果main方法中不使用join 如下

    public static void main(String[] args) throws InterruptedException {
        People p1 = new People("张三",10);
        People p2 = new People("李四",11);
        Thread t1 = new Thread(p1);
        Thread t2 = new Thread(p2);
        t1.start();
        t2.start();    
    }

    那么输出为:

    开始输出
    开始输出
    姓名张三
    年龄10
    姓名李四
    年龄11
    ========结束=========
    ========结束=========

    可见两个线程是同时开始的。

    如果main方法中使用join,如下:

    public static void main(String[] args) throws InterruptedException {
        People p1 = new People("张三",10);
        People p2 = new People("李四",11);
        Thread t1 = new Thread(p1);
        Thread t2 = new Thread(p2);
        t1.start();
        t1.join();
        t2.start();
        t2.join();
        
    }

    输出

    开始输出
    姓名张三
    年龄10
    ========结束=========
    开始输出
    姓名李四
    年龄11
    ========结束=========

    可见是执行完了第一个线程之后再执行的第二个线程。

  • 相关阅读:
    isequal 和startswith 使用
    UVa10340
    UVa1368
    UVa455
    UVa1225
    UVa1586
    UVa 1585
    UVa10082
    UVa272
    NYOJ1
  • 原文地址:https://www.cnblogs.com/gnivor/p/4686110.html
Copyright © 2011-2022 走看看