博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java线程(学习整理)--2---加入另一个线程join
阅读量:6814 次
发布时间:2019-06-26

本文共 2405 字,大约阅读时间需要 8 分钟。

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 args69      */70     public static void main(String[] args) {71         72         new M().start();73     }74 75 }

 运行结果:

中午啦!到饭点喽!

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

 

转载于:https://www.cnblogs.com/newwind/p/5658440.html

你可能感兴趣的文章
我的友情链接
查看>>
DRBD群集搭设
查看>>
我的友情链接
查看>>
centos下的KVM虚拟化实验
查看>>
我的友情链接
查看>>
Filter 禁止浏览器缓存动态资源,例如JSP资源 -学习笔记
查看>>
继承的好处和弊端学习
查看>>
RAID与LVM整理与总结
查看>>
51nod 1241:特殊的排序
查看>>
mogilefs详解
查看>>
简单工厂模式结构
查看>>
LearnMVC5-AddView
查看>>
zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法
查看>>
Windows Server 2008 R2和Windows 7脱机加入域
查看>>
让Windwos Server 2008 R2 SP1的FTP真正能访问
查看>>
SCOM-Agent安装—基于Windows工作组
查看>>
简单开发k8s多集群后台
查看>>
Linux MYSQL数据库系统部署及基本语句
查看>>
【01】KVM中小企业实践-概述
查看>>
SVN与Apache整合
查看>>