Java线程(学习整理)--2---加入另一个线程join

1、join简介:

     今天刚学的,这里我简单总结一下,join本身就是“加入”的意思,那么在线程中是什么意思呢?是在一个线程的run方法执行过程中,当特殊情况下需要执行一些其他的操作的时候,我们会用到join这个方法。

    假设:

      在执行A线程的时候,在A的run方法中,创建 了一个新的线程B,并且启动了,那么接下来分为2种情况:

      (1):B没有调用join方法:

              这个时候A线程和B线程其实是处于同一个级别状态的,A、B线程可以说是竞争关系,共同争夺CPU的使用权限。

          不存在那个一定在前执行,那个一定在后执行的概念!

      (2):B调用了join方法:

              这个时候,情况就和(1)不一样了!

              此时:在A的run方法中,代码块执行到B创建并执行的时候,A线程就会暂时地停止,让出CPU的使用权限,这个时候

          B线程就开始执行操作了,当B线程控制的操作执行结束之后,A线程从被停止的操作处,继续开始执行接下来的任务!

2、简单举例说明:

 1 package cn.sxt.joins;
 2 /**
 3  * 加入线程:join 
 4  *  
 5  * 模拟:妈妈做饭是让儿子去买酱油
 6  * @author 小风微灵
 7  *
 8  */
 9 
10 
11 class M extends Thread{
12     
13     public void run() {
14         System.err.println("中午啦!到饭点喽!");
15         System.out.println("妈妈准备--做饭。");
16         System.out.println("妈妈准备--洗菜。");
17         System.out.println("妈妈准备--切菜。");
18         System.out.println("妈妈准备--炒菜,发现没有酱油,让儿子去买酱油!");
19         
20         S s=new S();            
21         s.start();
22         try {
23             /**分析说明:
24              * 必须在启动子辅助线程的之后再调用join方法才会起到效果!
25              * 
26              * join()效果:
27              *         当前线程执行过程中,临时加入一个辅助线程,那么此时,当前线程暂停,
28              *     待辅助线程执行结束之后,在继续执行当前线程!
29              */
30             s.join();                //儿子买酱油加入到妈妈做菜的线程中去
31         } catch (InterruptedException e) {
32             e.printStackTrace();
33         }    
34         
35         System.out.println("妈妈开始炒菜。");
36         System.out.println("饭做好了,一家人一起吃饭。");
37         
38     }
39 }
40 
41 class S extends Thread{
42     public void run() {
43         System.out.println("儿子出门下楼。");
44         
45         try {
46             Thread.sleep(1000);
47         } catch (InterruptedException e) {
48             e.printStackTrace();
49         }
50         
51         System.out.println("儿子到达超,买到酱油!。");
52         System.out.println("儿子回家上楼。");
53         
54         try {
55             Thread.sleep(1000);
56         } catch (InterruptedException e) {
57             e.printStackTrace();
58         }
59         
60         System.out.println("儿子把酱油交给妈妈。");
61     }
62 }
63 
64 public class JoinThread {
65     
66     /**
67      * 启动程序
68      * @param args
69      */
70     public static void main(String[] args) {
71         
72         new M().start();
73     }
74 
75 }

 运行结果:

中午啦!到饭点喽!
妈妈准备--做饭。
妈妈准备--洗菜。
妈妈准备--切菜。
妈妈准备--炒菜,发现没有酱油,让儿子去买酱油!
儿子出门下楼。
儿子到达超,买到酱油!。
儿子回家上楼。

原文地址:https://www.cnblogs.com/newwind/p/5658440.html