Java多线程join()

2017-01-13 15:01:00来源:csdn作者:IsResultXaL人点击

第七城市

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。 也可以在调用join()时带上一个超时的参数,这样如果目标线程A在这段时间到期时还没有结束的话,join()方法返回,执行线程B,这个时候AB两个线程一起执行。 并且对join()方法的调用可以被中断,做法是在调用线程上调用interrupt()方法。

public class Sleeper extends Thread {private int duration;
public Sleeper(String name,int sleepTime){
super(name);
duration = sleepTime;
start();
}@Override
public void run() {
try {
sleep(duration);
} catch (Exception e) {
System.out.println(getName() + "被中断。" + "isInterrupted():" + isInterrupted());
}System.out.println(getName() + "已唤醒。");
}}

public class Joiner extends Thread {private Sleeper sleeper;
public Joiner(String name,Sleeper sleeper){
super(name);
this.sleeper = sleeper;
start();
}@Override
public void run() {
try {
sleeper.join();} catch (Exception e) {
// TODO: handle exception
}System.out.println(getName() + "加入完成。");
}public static void main(String[] args) {
Sleeper sleepy = new Sleeper("Sleepy", 1500),
grumpy = new Sleeper("Grumpy", 1500);Joiner dopey = new Joiner("Dopey", sleepy),
doc = new Joiner("Doc", grumpy);
sleepy.interrupt();
}
}

join()使用意义:

主线程B生成并起动了子线程A,而子线程A里要进行大量的耗时的运算,当主线程B处理完其他的事务后,需要用到子线程A的处理结果,这个时候就要用到join()方法了。


第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台