运行结果: 第一次运行 B==1 A==1 B==2 A==2 B==3 A==3 B==4 B==5 A==4 A==5 第二次运行 A==1 B==1 A==2 B==2 A==3 B==3 B==4 B==5 A==4 A==5 发现不是每次运行的结果顺序都不一样,这不是我们当时设计的初衷,我们想的是先执行完A再执行B的,但是这个结果不是我们想要的。这里主要是因为线程间是默认是没法保证哪个先执行的,所以两次的结果才出现不一致的情况。那么,有没有办法让A先执行完再执行B呢?答案当然是有了,这时候join就起到作用了,咱们在B线程里代码加上这么一句A.join()即可,修改后的代码如下:
public static void main(String[] args) { final Thread A = new Thread(new Runnable() { public void run() { printTest("A"); } }); Thread B = new Thread(new Runnable() { public void run() { try { A.join();//此处加入join,表示先执行完A线程后再执行此后面的语句 printTest("B"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); A.start(); B.start(); } public static void printTest(String threadName){ int count = 0; while(count < 5){ count++; System.out.println(threadName + ":" + count); } }咱们再看下运行的结果如何,是否达到我们的目的: 第一次运行 A==1 A==2 A==3 A==4 A==5 B==1 B==2 B==3 B==4 B==5 第二次运行 A==1 A==2 A==3 A==4 A==5 B==1 B==2 B==3 B==4 B==5 哈哈,到这里知道join的用处了吧。