您的位置:首页 > 其它

(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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐