zoukankan      html  css  js  c++  java
  • 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 }

     运行结果:

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

  • 相关阅读:
    python之字典
    Python包管理工具
    【转】Python实现修改Windows CMD命令行输出颜色(完全解析)
    进程池中传递实例方法问题
    HTML协议详解
    【转】python数据格式化之pprint
    【转】Python装饰器与面向切面编程
    【转】TCP/IP报文格式
    python之线程学习
    python之面向对象
  • 原文地址:https://www.cnblogs.com/newwind/p/5658440.html
Copyright © 2011-2022 走看看