join()方法可以让原来并列执行的线程,顺序执行,比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
如果对A线程使用interrupt()方法,则join()方法的低啊用可以被中断。
class Sleeper extends Thread{ private int duration; public Sleeper(String name,int sleepTime){ super(name); duration=sleepTime; start(); } @Override public void run() { try { TimeUnit.MILLISECONDS.sleep(duration); } catch (InterruptedException e) { System.out.println(getName()+" was interrupted."+ "isInterrupted(): "+isInterrupted()); return; } System.out.println(getName()+" has awakened"); } } 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 (InterruptedException e) { System.out.println("Interrupted"); } System.out.println(getName()+" join completed"); } } public class Joining { public static void main(String[] args){ Sleeper sleeper =new Sleeper("Sleepy",1500), grumpy=new Sleeper("Grumpy",1500); Joiner dopey=new Joiner("Dopey",sleeper), doc=new Joiner("Doc",grumpy); grumpy.interrupt(); } }结果:
Grumpy was interrupted.isInterrupted(): false
Doc join completed
Sleepy has awakened
Dopey join completed