thread.join函数,java多线程中的join函数解析
join函数的作用,是让当前线程等待,直到调用join()的 线程结束或者等到一段时间,我们来看以下代码
package mian;
public class simpleplela {
static void threadMessage(String message) {
String threadName =
Thread.currentThread().getName();
System.out.println(threadName+" "+message
);
}
private static class MessageLoop
implements Runnable {
public void run(){
String importantInfo[] = {
"ONe",
"TWo",
"THREe",
"four"
};
try{
for(int i = 0;
i<importantInfo.length;
i++){
Thread.sleep(4000);
threadMessage(importantInfo[i]);
}
}
catch(InterruptedException e){
threadMessage("I was'nt done!");
}
}
}
public static void main(String args[])
throws InterruptedException {
long patience = 1000*10;
if(args.length>0){
try{
patience = Long.parseLong(args[0])*1000;
}catch(NumberFormatException e){
System.err.println("Argument must be an integer");
System.exit(1);
}
}
threadMessage("Starting MessageLoop Thread");
long startTime = System.currentTimeMillis();
Thread t = new Thread(new MessageLoop());
t.start();
threadMessage("Waiting for MEssageLoop Thread to finish");
while((t.isAlive())){
threadMessage("still waiting...");
t.join();
if (((System.currentTimeMillis() - startTime) > patience)
&& t.isAlive()) {
threadMessage("Tired of waiting!");
t.interrupt();
// Shouldn't be long now
// -- wait indefinitely
t.join();
}
}
threadMessage("Finally!");
}
}
输出如下

package mian;
public class simpleplela {
static void threadMessage(String message) {
String threadName =
Thread.currentThread().getName();
System.out.println(threadName+" "+message
);
}
private static class MessageLoop
implements Runnable {
public void run(){
String importantInfo[] = {
"ONe",
"TWo",
"THREe",
"four"
};
try{
for(int i = 0;
i<importantInfo.length;
i++){
Thread.sleep(4000);
threadMessage(importantInfo[i]);
}
}
catch(InterruptedException e){
threadMessage("I was'nt done!");
}
}
}
public static void main(String args[])
throws InterruptedException {
long patience = 1000*10;
if(args.length>0){
try{
patience = Long.parseLong(args[0])*1000;
}catch(NumberFormatException e){
System.err.println("Argument must be an integer");
System.exit(1);
}
}
threadMessage("Starting MessageLoop Thread");
long startTime = System.currentTimeMillis();
Thread t = new Thread(new MessageLoop());
t.start();
threadMessage("Waiting for MEssageLoop Thread to finish");
while((t.isAlive())){
threadMessage("still waiting...");
t.join(1000);
if (((System.currentTimeMillis() - startTime) > patience)
&& t.isAlive()) {
threadMessage("Tired of waiting!");
t.interrupt();
// Shouldn't be long now
// -- wait indefinitely
t.join();
}
}
threadMessage("Finally!");
}
}
输出如下 我们分析一下,两段代码只有一行不一样。第一段是t.join(),会让当前线程(例子中为主线程)一直等待,知道t结束;
第二段是t.join(1000),会让当前线程等待1000毫秒,之后继续。

thread.join函数,java多线程中的join函数解析的更多相关文章
- Java多线程中的join()方法
一.join()方法介绍 join() 定义在Thread.java中.join()方法把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的join( ...
- java多线程中关于join方法的使用
Thread的非静态方法join()让一个线程B"加入"到另外一个线程A的尾部.在A执行完毕之前,B不能工作.例如: Thread t = new MyThread ...
- 浅谈Java多线程中的join方法
先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...
- Java多线程中的join方法
新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String name ...
- Java多线程中的常用方法
本文将带你讲诉Java多线程中的常用方法 Java多线程中的常用方法有如下几个 start,run,sleep,wait,notify,notifyAll,join,isAlive,current ...
- 【Java.Regex】使用正则表达式查找一个Java类中的成员函数
代码: import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; imp ...
- java 多线程中的wait方法的详解
java多线程中的实现方式存在两种: 方式一:使用继承方式 例如: PersonTest extends Thread{ String name; public PersonTest(String n ...
- 关于java多线程中异常捕获的理解
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception(比如sleep时的InterruptedException),也就是说各个线程需要自己把自己的checked e ...
- Java多线程中的竞争条件、锁以及同步的概念
竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生“竞争条件”的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作,此时对该数据的操作 ...
随机推荐
- AO总结10:MapControl控件
MapControl对应ArcMap中的数据视图,它封装了Map对象,并提供了额外的属性.方法.事件用于: 1 管理控件的外观.显示属性和地图属性 2 添加并管理控件中的数据层 3 装载Map文档控件 ...
- Linux autoconf和automake使用
作为Linux下的程序开发人员,一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Mak ...
- AngularJS初探:搭建PhoneCat项目的开发与测试环境
AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 对于PhoneCat项目的 ...
- Android Cursor空指针的问题
最近几天无聊自己动手写个音乐播放器,用到Cursor来取得数据库中音乐文件的信息,但是当用到Cursor的时候总是报空指针错误,后来发现是模拟器上没有音乐文件,使用Cursor的时候 ,若Cursor ...
- textbox不支持Ctrl+A
http://stackoverflow.com/questions/5885739/why-are-some-textboxes-not-accepting-control-a-shortcut-t ...
- Java中静态代码块,代码块,构造方法优先级、区别及代码示例
在项目中遇到了代码块的知识点,跑了下测试,写下结论 代码优先级:静态代码块 -> 构造代码块 -> 构造方法 多个代码块优先级,按照“先定义的代码先执行,后定义的代码后执行”原则执行 静态 ...
- LA 3641 (置换 循环的分解) Leonardo's Notebook
给出一个26个大写字母的置换B,是否存在A2 = B 每个置换可以看做若干个循环的乘积.我们可以把这些循环看成中UVa 10294的项链, 循环中的数就相当于项链中的珠子. A2就相当于将项链旋转了两 ...
- 为apache单独编译mod_rewrite.so
今天要把一个站点搬到一台Red Hat 4.1.2-42系统上,在配置rewrite的时候,发现apache没有mod_rewrite,可能是当初编译apache的时候没有带上 --enable-re ...
- 我的c语言经历
作为一名计算机专业的学生,c语言是我的启蒙编程语言.当时,是刘慧老师带的课.很庆幸,是刘老师带的课.因为,后来当我这个人有了一些经历就会知道.对于像一张 白纸一样的大一新生.老师,如果能给学生很好的启 ...
- hdu 3535 AreYouBusy
// 混合背包// xiaoA想尽量多花时间做ACM,但老板要求他在T时间内做完n堆工作,每个工作耗时ac[i][j],// 幸福感ag[i][j],每堆工作有m[i]个工作,每堆工作都有一个性质,/ ...