java thread isalive_Java线程编程中isAlive()和join()的使用详解
一个线程如何知道另一线程已经结束?Thread类提供了回答此问题的方法。
有两种方法可以判定一个线程是否结束。第一,可以在线程中调用isAlive()。这种方法由Thread定义,它的通常形式如下:
final boolean isAlive( )
如果所调用线程仍在运行,isAlive()方法返回true,如果不是则返回false。但isAlive()很少用到,等待线程结束的更常用的方法是调用join(),描述如下:
final void join( ) throws InterruptedException
该方法等待所调用线程结束。该名字来自于要求线程等待直到指定线程参与的概念。join()的附加形式允许给等待指定线程结束定义一个最大时间。下面是前面例子的改进版本。运用join()以确保主线程最后结束。同样,它也演示了isAlive()方法。
// Using join() to wait for threads to finish.
class NewThread implements Runnable {
String name; // name of thread
Thread t;
NewThread(String threadname) {
name = threadname;
t = new Thread(this, name);
System.out.println("New thread: " + t);
t.start(); // Start the thread
}
// This is the entry point for thread.
public void run() {
try {
for(int i = 5; i > 0; i--) {
System.out.println(name + ": " + i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println(name + " interrupted.");
}
System.out.println(name + " exiting.");
}
}
class DemoJoin {
public static void main(String args[]) {
NewThread ob1 = new NewThread("One");
NewThread ob2 = new NewThread("Two");
NewThread ob3 = new NewThread("Three");
System.out.println("Thread One is alive: "+ ob1.t.isAlive());
System.out.println("Thread Two is alive: "+ ob2.t.isAlive());
System.out.println("Thread Three is alive: "+ ob3.t.isAlive());
// wait for threads to finish
try {
System.out.println("Waiting for threads to finish.");
ob1.t.join();
ob2.t.join();
ob3.t.join();
} catch (InterruptedException e) {
System.out.println("Main thread Interrupted");
}
System.out.println("Thread One is alive: "+ ob1.t.isAlive());
System.out.println("Thread Two is alive: "+ ob2.t.isAlive());
System.out.println("Thread Three is alive: "+ ob3.t.isAlive());
System.out.println("Main thread exiting.");
}
}
程序输出如下所示:
New thread: Thread[One,5,main]
New thread: Thread[Two,5,main]
New thread: Thread[Three,5,main]
Thread One is alive: true
Thread Two is alive: true
Thread Three is alive: true
Waiting for threads to finish.
One: 5
Two: 5
Three: 5
One: 4
Two: 4
Three: 4
One: 3
Two: 3
Three: 3
One: 2
Two: 2
Three: 2
One: 1
Two: 1
Three: 1
Two exiting.
Three exiting.
One exiting.
Thread One is alive: false
Thread Two is alive: false
Thread Three is alive: false
Main thread exiting.
如你所见,调用join()后返回,线程终止执行。
java thread isalive_Java线程编程中isAlive()和join()的使用详解相关推荐
- 网络编程中的SO_REUSEADDR和SO_REUSEPORT参数详解
1.SO_REUSEADDR: 在BSD中,SO_REUSEADDR选项有两个用户: 如果有socket绑定了0.0.0.0:port:设置该参数后,其他socket可以绑定本机ip:port.(该功 ...
- Java并发编程(07):Fork/Join框架机制详解
本文源码:GitHub·点这里 || GitEE·点这里 一.Fork/Join框架 Java提供Fork/Join框架用于并行执行任务,核心的思想就是将一个大任务切分成多个小任务,然后汇总每个小任务 ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...
- C++ tcpip网络编程中listen函数和accept函数详解和区别
listen函数 摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定 ...
- java 不可修改的map_Java中如何实现不可变Map详解
前言 有时最好不允许修改 java.util.Map, 例如跨线程共享只读数据.为此,我们可以使用Unmodifiable Map或Immutable Map. 在这个快速教程中,我们将看到它们之间 ...
- java 8 不可变map_Java中如何实现不可变Map详解
前言 有时最好不允许修改 java.util.map, 例如跨线程共享只读数据.为此,我们可以使用unmodifiable map或immutable map. 在这个快速教程中,我们将看到它们之间 ...
- java int byte数组_Java 中int与byte数组转换详解
1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...
- java构造器调用构造器_java中构造器内部调用构造器实例详解
可能为一个类写了多个构造器,有时可能想在一个构造器里面调用另外一个构造器,为了减少代码的重复,可用this关键字做到这一点. public class Flower { private String ...
- Cocoa编程中视图控制器与视图类详解
iPhone编程规则是:一个窗口,多个视图.UIView是iPhone屏幕上很多控件的基础类.每个iPhone用户界面都是由显示在UIWindow(这其实也是个特殊的UIView)内的众多UIView ...
最新文章
- GPB|农业生产活动对水体微生态的重要影响(一作解读)
- 亿科影视管理系统1.2.0版以及1.0版本均有后门
- NYOJ 469 擅长排列的小明 II (dp问题)
- Hadoop Yarn内存使用优化配置
- 【小白学习C++ 教程】五、C++数据结构向量和数组
- RavenDB:基于Windows/.NET平台的NoSQL数据库
- 【Pytorch神经网络理论篇】 28 DGLGraph图的基本操作(缺一部分 明天补)
- 11.73 亿人看央视春晚;苹果逼用户买充电器;特斯拉 Model 3 降价七千 | 极客头条...
- std::thread参数传递包含引用时的注意事项
- (个人)Linux基本指令收集
- 【2016-2017 ACM-ICPC (ECNA 2016) F】Removal Game【区间DP】
- c语言海报设计图片,ps海报设计教程:一张照片配文字排版技巧
- 网络上的计算机找不到打印机,网络打印机找不到,详细教您网络打印机找不到怎么办...
- 计算机的发明人是约翰用英语,电脑发明者是谁:约翰·冯·诺依曼(发明于1946年)...
- 条件欧几里得聚类实验数据集Statues_4.pcd下载
- 全程回顾 Blazor Day in China 精彩分享
- 无损音乐知识收集3(转)
- 计算机网络——基本认识
- Python编程求:一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,反弹,求在第十次落地时,共经过多少米,第十次反弹多高
- pytorch中的Variable还有必要使用吗?
热门文章
- 蓝桥杯 n进制小数
- cpickle支持的python版本_Python序列化模块pickle和cPickle
- 钉钉机器人发送图片 python_python封装钉钉Webhook机器人消息发送逻辑
- 小心DLL链接静态库时的内存错误
- arduino蜂鸣器_板卡推荐BPIUNO32 arduino 开发板,支持webduino与arduino应用
- 第一代计算机主要应用领域为数据处理,第一代计算机主要应用领域为____。 A.数据处理 B.人工智能 C.科学计算 D.过程控制...
- C语言switch怎么算,超级新手,用switch写了个计算器程序,求指导
- ansi编码转换_8b/1b编码是个什么东东
- 【APICloud系列|30】苹果MAC电脑取消辅助功能-语音识别
- Metasploit入门用法(主动攻击)