(22)21.2.11 加入一个线程join()
2012-11-16 12:28
176 查看
1.本小节总结join()方法:
1) 一个线程可以在其线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行。2)若果某个线程在另一个线程t上调用join(),此线程将被挂起,直到目标线程t结束才恢复,即t.isAlive()返回为false。
3)也可以调用join()时带上一个超时参数(以毫秒或者毫秒和纳秒为单位),如果目标线程在这段时间到期还没有结束的话,join()方法总能返回。
4)join()方法的调用可以被中断,做法是在调用线程上调用interrupt()方法,这是需要用到try-catch子句。
2.例子:
[align=left]package jiangning.c21;[/align][align=left]class Sleeper extends Thread{[/align]
[align=left] private int duration ;[/align]
public Sleeper(String
name, int sleepTime){
[align=left] super(name);[/align]
duration =
sleepTime;
[align=left] start();[/align]
[align=left] }[/align]
[align=left] public void run(){[/align]
[align=left] try {[/align]
System. out.println("come
in sleeper run " + System.currentTimeMillis());
[align=left] sleep(duration);[/align]
System. out.println("sleeper
end " +this.getName());
} catch (InterruptedException
e) {
System. out.println(getName()
+ " was interrupted. " + "isInterrupted():
" + isInterrupted());
[align=left] return;[/align]
[align=left] }[/align]
System. out.println(getName()
+ " has awakened" );
[align=left] }[/align]
[align=left]}[/align]
[align=left]class Joiner extends Thread{[/align]
[align=left] private Sleeper sleeper ;[/align]
public Joiner(String
name, Sleeper sleeper){
[align=left] super(name);[/align]
this.sleeper =
sleeper;
[align=left] start();[/align]
[align=left] }[/align]
[align=left] public void run(){[/align]
[align=left] try {[/align]
System. out.println("come
in Joiner run " + System.currentTimeMillis());
[align=left] sleeper.join(1000);//等待sleeper运行完成后再运行。[/align]
System. out.println("joiner
end " + this.getName());
} catch (InterruptedException
e) {
[align=left] System. out.println("interrupted" );[/align]
[align=left] }[/align]
System. out.println(getName()
+ " join completed" );
[align=left] }[/align]
[align=left]}[/align]
public class Joining
{
public static void main(String[]
args) {
[align=left] Sleeper[/align]
[align=left] sleepy = new Sleeper("Sleepy" ,5000),//创建对象,启动线程,执行休眠方法,[/align]
[align=left] grumpy = new Sleeper("Grumpy" ,5000);[/align]
[align=left] Joiner[/align]
[align=left] dopey = new Joiner( "Dopey",sleepy),[/align]
[align=left] doc = new Joiner( "Doc",grumpy);[/align]
[align=left] grumpy.interrupt(); //中断,进入catch[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]/**[/align]
[align=left]come in sleeper run 1352701238531[/align]
[align=left]come in sleeper run 1352701238531[/align]
[align=left]come in Joiner run 1352701238531[/align]
[align=left]Grumpy was interrupted. isInterrupted(): false[/align]
[align=left]come in Joiner run 1352701238531[/align]
[align=left]joiner end Doc 1352701238531[/align]
[align=left]Doc join completed[/align]
[align=left]joiner end Dopey 1352701239531[/align]
[align=left]Dopey join completed[/align]
[align=left]sleeper end Sleepy[/align]
[align=left]Sleepy has awakened[/align]
[align=left]*/[/align]
相关文章推荐
- 加入一个线程:join
- pthread_join 两次同一个线程
- Thread 提供的让一个线程等待另一个线程完成的方法:join()方法
- 加入一个线程
- .net micro framework的入门例程-点灯神话-5.加入一个线程闪烁LED
- 多线程之join()方法---(Thread提供的让一个线程等待另一个线程完成的方法)
- 怎么形象化的理解Java中的加入(join)线程?
- 在主线程里加入一个loading画面的多线程代码
- JavaSE8基础 Thread getThreadGroup 将新建的线程加入到一个指定线程组中
- java 加入一个线程、创建有响应的用户界面 。 示例代码
- .net C#线程连接Join的技巧,如何真正让一个线程结束,另外一个线程启动
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 一个进程可以创建多少线程?
- 8-22学习练习[一个viewController整合增删移动功能]
- 关于Opengl中将24位BMP图片加入�一个alpha通道并实现透明的问题
- 自制简单的Java下载器——来自《Java高级编程》的一个关于线程的例子(带上部分注释)
- Java线程中yield与join方法的区别
- 写两个线程,一个加,一个减
- 题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
- C# 线程(三):如何操纵一个线程