线程等待 Join()方法
- Join()方法是让一个线程等待另一个线程的完成
下面看个例子:
package project11;
public class TestJoin extends Thread {
public void run() {
for(int i= 1;i<=10;i++)//线程循环10次输出
{
System.out.println(Thread.currentThread().getName()+"第"+i+"次运行");
}
System.out.println(Thread.currentThread().getName()+"运行结束");
}
public static void main(String [] args) { //main函数的主线程开始运行
System.err.println("主线程开始运行");
TestJoin tj = new TestJoin(); //创建线程类
tj.setName("线程1"); //给线程起名字
try {
long start = System.nanoTime();
tj.start();
tj.join(); //等待tj线程运行结束
long end = System.nanoTime();
System.out.println("耗时"+(end-start)/1000000+"毫秒");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("主线程运行结束");//main函数的主线程运行结束
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
“`
从程序运行结果可以看出,main方法代表的主线程在建立TestJoin tj 这个线程对象后,调用t.start()来运行线程,并调用了tj.join()来等待线程tj的完成,在线程tj完成了10次字符输出并结束线程后,主线程才计算了线程tj的耗时,并输出字符然结束主线程的运行。
这样理解会简单一些
!!!!!把程序中的tj.join()这行程序注释掉,会发现
如果没有使用Join方法,那么主线程就会在tj线程还未运行结束前就结束。
线程等待 Join()方法的更多相关文章
- “全栈2019”Java多线程第七章:等待线程死亡join()方法详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- 多线程---其他方法 停止线程、守护线程、join方法
第三方停止线程: 原来是stop(),因为该方法有些问题,所以被interrupt()方法取代,它的用途跟机制是 当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除,强制让线程恢复到 ...
- java多线程之守护线程以及Join方法
版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.守护线程概述及示例 守护线程就是为其它线程提供"守护"作用,说白了就是为其它线程服务的,比如GC线程. java程序中线程分 ...
- 线程的join()方法
官网描述 join public final void join() throws InterruptedException Waits for this thread to die. An invo ...
- Java中的后台线程和join方法
/*守护线程(后台线程):在一个进程中如果只剩下 了守护线程,那么守护线程也会死亡. 需求: 模拟QQ下载更新包. 一个线程默认都不是守护线程. */ public class Demo extend ...
- 43. 守护线程 和 join方法
1.守护线程(后台线程): 我们在使用一款软件的时候,有的软件会让我们在不知道的情况下下载一些东西,那么这个就是后台线程. 一般用于提高软件的下载量(也就是 ...
- 【转】线程join()方法的含义
在很多情况下,主线程生成并启动了子线程,如果子线程里要进行大量的耗时运算,主线程往往将于子线程之前结束,但是如果主线程处理完其它事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后 ...
- 线程的使用方法start run sleep join
今天回顾了Java的线程的一些知识 例1:下面代码存有详细的解释 主要是继承Thread类与实现Runnable接口 以及start()和run()方法 package com.date0607; / ...
- 线程join方法详解
执行逻辑:在当前代码块(比如main方法)中的线程A执行了join方法, 那么当代码块(main)执行到join方法时,会停止继续向下执行,一直到线程A执行完毕, main方法才会继续向下执行. 代码 ...
随机推荐
- 在iframe外层head中插入link
let src = 'abc.css?v='+Math.random(); let link = window.parent.document.createElement('link'); link. ...
- rails5.2新特性--ActiveStorage, 使用80percent/rails-template
看guide,看ruby-China的好贴,看最新版的书上案例. 以下摘自https://ruby-china.org/topics/36666 作者lyfi2003 用户对上传文件的要求体验: 上传 ...
- Spring的注解@Qualifier(二十五)
转载:https://www.cnblogs.com/smileLuckBoy/p/5801678.html 近期在捯饬spring的注解,现将遇到的问题记录下来,以供遇到同样问题的童鞋解决~ 先说明 ...
- 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 处理ListView数据为空的情况
如何处理需要填充的数据为空的情况? ListView及其他继承自AdapterView的类都有一个简便的处理这种情况的方法:setEmptyView(View). 当ListView的Adapter为 ...
- Backbone设计思路和关键源码分析
一. Backbone的江湖地位: backbone作为一个老牌js框架为大规模前端开发提供了新的开发思路:前端MVC模式,这个模式也是前端开发演变过程中的一个重要里程碑,也为MVVM和Redux等开 ...
- 12.19 redis缓存
---恢复内容开始--- 命中:应用程序从key中获取数据,取到后返回 失效:到设置的失效时间后就失效 更新:应用程序把数据存到数据库中后又放回去 在项目中使用redis方法 结合业务场景,避免滥用 ...
- 免费获取 Kaspersky Small Office Security 90 天授权
Kaspersky Small Office Security 是卡巴斯基出品的企业版杀毒软件,目前美国官网上官方有赠送活动,能够免费获取 90 天的授权,但必须要使用美国代理. 获取地址:http: ...
- Beta阶段第1周/共2周 Scrum立会报告+燃尽图 02
作业要求与 [https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284] 相同 版本控制:https://git.coding.net/li ...
- Linux:root下的文件-anaconda-ks.cfg详解
anaconda-ks.cfg详解 系统安装的时候生成的一个文件,通过这个文件可以修改成自动安装的脚本,用于自动安装同样配置的系统. 自动生成的启动文件anaconda# Kickstart file ...