读书人

关于java多线程中join的运用

发布时间: 2012-10-07 17:28:51 作者: rapoo

关于java多线程中join的使用

关于java多线程中join的使用:见下面的两个简单线程类

1、沉睡者类

package com.demo;

public class Sleeper extends Thread {
??? private int duration;
?public Sleeper(int duration,String name){
??super(name);
??this.duration = duration;
??start();
?}
?public void run(){
??
??try {
???sleep(duration);
??} catch (InterruptedException e) {
???System.out.println(getName()+" is interupted.");
???? return;
??}
??System.out.println(getName() +"has wakened");
??
?}
?
?/**
? * @param args
? */
?public static void main(String[] args) {

??Sleeper sleeper1 = new Sleeper(1500,"sleeper1");
??Sleeper sleeper2 = new Sleeper(1500,"sleeper2");
??Joiner joiner1 = new Joiner(sleeper1,"joiner1");
??Joiner joiner2 = new Joiner(sleeper2,"joiner2");
??sleeper1.interrupt();
?}

}

?

2、加入者类
class Joiner extends Thread{
?private Thread t;
?public Joiner(Thread t,String name){
??super(name);
??this.t=t;
??start();
?}
?public void run(){
??try {
???
???t.join();
???
??} catch (InterruptedException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}
??System.out.println(getName()+" is completed");
?}
}

对代码运行结果的分析:

join的使用场景描述:当存在两个线程,A和B,当线程A在线程B上调用A.join()时,此时B线程将被挂起,直到A线程结束或者A线程调用interrupt()方法。

?

?

==========================================================

一下是这段代码的运行结果:

sleeper1 is interupted.
joiner1 is completed
sleeper2has wakened
joiner2 is completed

?

?

读书人网 >编程

热点推荐