您的位置:首页 > 编程语言 > Java开发

浅解java 中thread.join()的用法

2016-02-27 14:29 375 查看
今天学习Thread.join() 有点疑惑 就上网搜了搜join的用法,发现第一页的答案基本上都是一个人写的 而且不是很直观,搞懂了之后我决定自己写篇关于

join()用法的文章

说白了就一句话 主线程run()方法中读到thread.join()时(程序中为a.join()),就暂定该主线程,调用子线程的run()方法直到结束,再后续执行主线程的run();

为了使结果更明了 ,在A的run方法中加入了TimeUnit.MILLISECONDS.sleep(1);

代码如下:

package Number_21;

import java.util.concurrent.TimeUnit;

/**
* 加入一个线程
*
* @author he
*/

class A extends Thread {
int countdown = 4;

A(String name) {
super(name);
start();
}

@Override
public void run() {
while (--countdown > 0) {
// 休眠
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("A");
}
}

}

class B extends Thread {
int countdown = 5;
A a;

B(String name, A a) {
super(name);
this.a = a;
start();
}

@Override
public void run() {

while (--countdown > 0) {
if (countdown == 2) {
// 读到thread.join()时会先暂停该线程,执行a的run()方法直到a的run()结束再执行b的run();
try {
a.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

System.out.println("B");
}

}

}

public class P670 {
public static void main(String[] args) {

B b = new B("B1", new A("A1"));

}

}


结果为:

B

B

A

A

A

B

B

如果 注释掉 B run方法中的

// try {

// a.join();

// } catch (InterruptedException e) {

// // TODO Auto-generated catch block

// e.printStackTrace();

// }

结果为:

B

B

B

B

A

A

A
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: