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多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生“竞争条件”的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作,此时对该数据的操作 ...
随机推荐
- linux 防火墙iptables简明教程
前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔 ...
- JavaWeb项目开发案例精粹-第3章在线考试系统-007View层
0.login.jsp <%@ page language="java" import="java.util.*" pageEncoding=" ...
- ScannerDemo------string int
import java.util.Scanner; /** *Scanner演示 */ public cl ...
- Android yyyymmdd转成yyyy-MM-dd格式
//把yyyymmdd转成yyyy-MM-dd格式 public static String formatDate(String str){ SimpleDateFormat sf1 = new Si ...
- 图像二值化----otsu(最大类间方差法、大津算法)
最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津 法,简称OTSU.它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像 ...
- 语言基础:C#输入输出与数据类型及其转换
今天学习了C#的定义及特点,Visual Studio.Net的集成开发环境和C#语言基础. C#语言基础资料——输入输出与数据类型及其转换 函数的四要素:名称,输入,输出,加工 输出 Console ...
- Objective-C命名编写规范
There are only two hard things in Computer Science: cache invalidation and naming things. 在计算机科学中只有两 ...
- 【HDOJ】4080 Stammering Aliens
1. 题目描述给定一个长为$n \in [1, 4000]$的字符串,求其中长度最长的子串,并且该子串在原串中出现至少$m$次,并求最右起始位置. 2. 基本思路两种方法:二分+后缀数组,或者二分+哈 ...
- [51NOD]BSG白山极客挑战赛
比赛链接:http://www.51nod.com/contest/problemList.html#!contestId=21 /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリキリ♂ min ...
- Java 比较两张图片的相似度
import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; /** * 比较两张图片 ...