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

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

  1. class People implements Runnable{
  2. public String name ;
  3. public int age;
  4. public People(String name , int age){
  5. this.name =name;
  6. this.age = age;
  7. }
  8. @Override
  9. public void run() {
  10.  
  11. System.out.println("开始输出");
  12. System.out.println("姓名"+name);
  13. System.out.println("年龄"+age);
  14. try {
  15. Thread.sleep(1000);
  16. } catch (InterruptedException e) {
  17. e.printStackTrace();
  18. }
  19. System.out.println("========结束=========");
  20.  
  21. }
  22.  
  23. }

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

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

那么输出为:

  1. 开始输出
  2. 开始输出
  3. 姓名张三
  4. 年龄10
  5. 姓名李四
  6. 年龄11
  7. ========结束=========
  8. ========结束=========

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

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

  1. public static void main(String[] args) throws InterruptedException {
  2. People p1 = new People("张三",10);
  3. People p2 = new People("李四",11);
  4. Thread t1 = new Thread(p1);
  5. Thread t2 = new Thread(p2);
  6. t1.start();
  7. t1.join();
  8. t2.start();
  9. t2.join();
  10.  
  11. }

输出

  1. 开始输出
  2. 姓名张三
  3. 年龄10
  4. ========结束=========
  5. 开始输出
  6. 姓名李四
  7. 年龄11
  8. ========结束=========

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

Java并发编程--多线程中的join方法详解的更多相关文章

  1. Java并发编程:线程封闭和ThreadLocal详解

    转载请标明出处: http://blog.csdn.net/forezp/article/details/77620769 本文出自方志朋的博客 什么是线程封闭 当访问共享变量时,往往需要加锁来保证数 ...

  2. Java并发编程(多线程)中的相关概念

    众所周知,在Java的知识体系中,并发编程是非常重要的一环,也是面试中必问的题,一个好的Java程序员是必须对并发编程这块有所了解的. 并发必须知道的概念 在深入学习并发编程之前,我们需要了解几个基本 ...

  3. Java并发编程3-抽象同步队列AQS详解

    AQS是AtractQueuedSynchronizer(队列同步器)的简写,是用来构建锁或其他同步组件的基础框架.主要通过一个int类型的state来表示同步状态,内部有一个FIFO的同步队列来实现 ...

  4. Java并发编程(07):Fork/Join框架机制详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Fork/Join框架 Java提供Fork/Join框架用于并行执行任务,核心的思想就是将一个大任务切分成多个小任务,然后汇总每个小任务 ...

  5. 读Java并发编程实践中,向已有线程安全类添加功能--客户端加锁实现示例

    在Java并发编程实践中4.4中提到向客户端加锁的方法.此为验证示例,写的不好,但可以看出结果来. package com.blackbread.test; import java.util.Arra ...

  6. “全栈2019”Java多线程第七章:等待线程死亡join()方法详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...

  8. JAVA 注解的几大作用及使用方法详解

    JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...

  9. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

随机推荐

  1. jQuery 中的事件绑定与取消绑定

    1:在jQuery中使用bind方法进行事件的绑定,bind方法有两个参数,第一个参数是事件的类型例如click,change,keyup,keydown,blur,focus等.第二个参数是一个回调 ...

  2. 负电压基准电路(-2.5V/-5V电压基准)

    运算放大器大多数都是双电源的,这就要求有正负基准电压,除了从稳压源直接输出电压外,很多时候都是一个单电源对整个电路供电,这就要求要把正电压转换成负电压,从而产生正负的电压基准,对双电源运算放大器进行供 ...

  3. 我为什么放弃了win7系统

    作为一个软件开发者,由于要常年维护一些老系统,所以非常看中win7对一些稍老一点软件的兼容性,可它还是让我失望了: 如果没有特殊手段,sqlserver2000是不能向导式安装成功的: 之前公司的主要 ...

  4. Java---设计模块(工厂方法)

    ★ 场景和问题 Java程序开发讲究面向接口编程,隐藏具体的实现类,可是如何得到接口呢? 工厂类的命名规范:***Factory 单例工厂方法的命名规范:getInstance() 工厂的本质是&qu ...

  5. [Operationg System Labs] 我对 Linux0.00 中 boot.s的理解和注释

    (如有错误请立即指正,么么哒!) !    boot.s!! It then loads the system at 0x10000, using BIOS interrupts. Thereafte ...

  6. Java[3] Java多线程相关资料

    Java多线程: http://www.uml.org.cn/j2ee/201509093.asp

  7. [C++]memcpy 小记

    #include <stdio.h> #include <stdlib.h> #include <string.h> int main () { char a = ...

  8. JavaScript 类私有方法的实现

    一:将私有方法移出模块,因为模块内部的所有方法都是对外可见的. class Widget { foo (baz) { bar.call(this, baz); } // ... } function ...

  9. Delphi TStringList的用法

    Delphi TStringList的用法 TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. TStringList 常用方法与属性: var List: TStringL ...

  10. Showing 2 changed files with 3 additions and 3 deletions.

    4  lib/matplotlib/__init__.py View   @@ -126,9 +126,9 @@ def compare_versions(a, b):     else: ...