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
    ========结束=========

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

  • 相关阅读:
    进入新的一线开发周期
    某框架的反人类特性
    8月最后一天随想
    jython 2.7 b3发布
    [转] 基于 Apache Mahout 构建社会化推荐引擎
    FreeBSD10上编译尝试DeepIn UI
    PDT已有很大改进
    两张图
    FreeBSD暂时用9.X系列为宜
    backbone教程
  • 原文地址:https://www.cnblogs.com/gnivor/p/4686110.html
Copyright © 2011-2022 走看看