thread.join() 方法存在的必要性是什么?
好久远的问题,为什么关注这个问题的人这么少?
或许是用到这个功能的情形比较少吧。
1、等待处理结果
为什么要用join()方法在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。当只有一个主线程和一个子线程的情况这个说法似乎站不住脚,那就往↓↓看
2、未捕获的异常
java多线程程序中所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。但是无法避免的是unchecked exception,也就是RuntimeException,当抛出异常时子线程会结束,但不会影响主线程。难免会有没有处理到的异常情况,如果放到一个方法(函数)中执行,一旦出现则会导致主线程崩溃,而放到子线程中去执行则不会受到影响。
3、等待指定时间
t.join(1000); //等待 t 线程,等待时间是1000毫秒
1、等待处理结果
为什么要用join()方法
在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。
当只有一个主线程和一个子线程的情况这个说法似乎站不住脚,那就往↓↓看
2、未捕获的异常
java多线程程序中所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的checked exception处理掉。但是无法避免的是unchecked exception,也就是RuntimeException,当抛出异常时子线程会结束,但不会影响主线程。
难免会有没有处理到的异常情况,如果放到一个方法(函数)中执行,一旦出现则会导致主线程崩溃,而放到子线程中去执行则不会受到影响。
3、等待指定时间
t.join(1000); //等待 t 线程,等待时间是1000毫秒
作者:微wx笑
链接:https://www.zhihu.com/question/27485990/answer/243189342
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
thread.join() 方法存在的必要性是什么?的更多相关文章
- Thread.join()方法
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B.t.join() ...
- Java Thread.join()方法
一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二.为什么要用join() ...
- JAVA THREAD.JOIN方法详解
一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二.为什么要用join() ...
- 多线程--Thread.join方法
在Thread类的Api中,Join的作用是让当前线程等待目标线程结束之后才继续执行. thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. 比如在线程B ...
- Java java.lang.Thread#join()方法分析
结论:A 线程调用 B 线程对象的 join 方法,则 A 线程会被阻塞,直到 B 线程 挂掉 (Java Doc 原话: Watis for this thread to die). 一.分析 查看 ...
- Thread join方法的用途
主线程中会创建多个子线程做一些事情,主线程要用到这些子线程处理的数据,因此它需要等待所有的子线程处理完之后才继续运行.这就要用到join方法了.
- Thread.join方法的解析(转)
原文链接:https://www.cnblogs.com/huangzejun/p/7908898.html 1. join() 的示例和作用 1.1 示例 1 // 父线程 2 public cla ...
- 浅析Thread的join() 方法
Thread中的 join() 方法在实际开发过程中可能用的不是很多,但是在面试中作为考察基本功知识的扎实与否,经常会被用到.因此,对于 Thread 的 join() 方法进行了一定的研究. 常见的 ...
- Thread的join方法
一个线程在执行的过程中,可能调用另一个线程,前者可以称为调用线程,后者成为被调用线程. Thread.Join方法的使用场景:调用线程挂起,等待被调用线程执行完毕后,继续执行. 如下案列: 当NewT ...
随机推荐
- 解析 Lambda 表达式
我们先创建一个表达式树: Expression<Func<int, int, int>> expression = (a,b) => a + b; 我们的例子是一个Exp ...
- IDEA 提交项目至Git与获取Git项目
1.IDEA提交项目至git 注:保证已安装Git分布式管理系统,没有自行百度安装git 1)在IDEA中配置Git与GitHub a)Git: File-->Settings --> V ...
- hdu6040
hdu6040 题意 将一个函数运行 n 次,一共得到 n 个值,有 m 次询问,每次询问第 k 小的值. 分析 考察了 \(nth\_element\) 函数的运用.\(nth\_element(a ...
- 理解竞争条件( Race condition)漏洞
这几天一个叫做"Dirty COW"的linux内核竞争条件漏洞蛮火的,相关公司不但给这个漏洞起了个洋气的名字,还给它设计了logo(见下图),首页,Twitter账号以及网店.恰 ...
- 【bzoj1598】【 [Usaco2008 Mar]牛跑步】启发式搜索思路+spfa
(上不了p站我要死了,侵权度娘背锅) 最近复习搜索,先从启发式搜索来吧. 感觉启发式搜索这玩意挺玄学的,先从其思想入手,做一道经典的K短路. Description BESSIE准备用从牛棚跑到池塘的 ...
- jsp笔记2(编译指令与动作指令)
一.jsp的编译指令是通知jsp引擎的消息,不会生成输出. jsp的3个编译指令: page:针对当前页面的指令 include:包含另一个页面的指令 taglib:用于定义和访问自定义标签 ...
- Ubuntu 16.04没有/etc/default/rcS文件的UTC设置选项的问题解决
继续上一篇文章介绍了CentOS的时钟设置:http://www.cnblogs.com/EasonJim/p/8111747.html,大致的知道了BIOS在Linux的时区设置. 而现在关心的问题 ...
- Linux下进行Web服务器压力(并发)测试工具http_load、webbench、ab、Siege、autobench简单使用教程(转)
一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...
- oracle wm_concat 拼接乱码 显示问号等
今天用plsql查询工具 拼接sql查询显示乱码,不知道为何. 后来经多方查找资料 现在分享如下. 针对oracle拼接函数的乱码,首先查询一下oracle字符的编码是否支持中文,查询语句: SELE ...
- openfire源码研究笔记:对设计模式及原则的学习
原文:http://blog.csdn.net/jinzhencs/article/details/50522105 一.拦截器的实现 地点: package org.jivesoftware.o ...