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、简单举例说明:
package cn.sxt.joins;
/**
* 加入线程:join
*
* 模拟:妈妈做饭是让儿子去买酱油
* @author 小风微灵
*
*/ class M extends Thread{ public void run() {
System.err.println("中午啦!到饭点喽!");
System.out.println("妈妈准备--做饭。");
System.out.println("妈妈准备--洗菜。");
System.out.println("妈妈准备--切菜。");
System.out.println("妈妈准备--炒菜,发现没有酱油,让儿子去买酱油!"); S s=new S();
21 s.start();
try {
/**分析说明:
* 必须在启动子辅助线程的之后再调用join方法才会起到效果!
*
* join()效果:
* 当前线程执行过程中,临时加入一个辅助线程,那么此时,当前线程暂停,
* 待辅助线程执行结束之后,在继续执行当前线程!
*/
s.join(); //儿子买酱油加入到妈妈做菜的线程中去
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.println("妈妈开始炒菜。");
System.out.println("饭做好了,一家人一起吃饭。"); }
} class S extends Thread{
public void run() {
System.out.println("儿子出门下楼。"); try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.println("儿子到达超,买到酱油!。");
System.out.println("儿子回家上楼。"); try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} System.out.println("儿子把酱油交给妈妈。");
}
} public class JoinThread { /**
* 启动程序
* @param args
*/
public static void main(String[] args) { new M().start();
} }
运行结果:
中午啦!到饭点喽!
妈妈准备--做饭。
妈妈准备--洗菜。
妈妈准备--切菜。
妈妈准备--炒菜,发现没有酱油,让儿子去买酱油!
儿子出门下楼。
儿子到达超,买到酱油!。
儿子回家上楼。
Java线程(学习整理)--2---加入另一个线程join的更多相关文章
- java多线程学习(两)——创建一个线程
一个.java创建两个线程的方法 1.从java.lang.Thread派生一个新类线程类,其覆盖run()方法 2.实现Runnable接口.重载Runnable接口中的run()方法. 使用Thr ...
- Android(java)学习笔记219:开发一个多界面的应用程序之两种意图
1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...
- Android(java)学习笔记162:开发一个多界面的应用程序之两种意图
1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...
- 开启两个线程,一个线程打印A~Z,一个线程打印1~52的数据
开启两个线程,一个线程打印A-Z,一个线程打印1-52的数据 import java.util.concurrent.locks.Condition; import java.util.concurr ...
- Java并发学习之二——获取和设置线程信息
本文是学习网络上的文章时的总结,感谢大家无私的分享. Thread类的对象中保存了一些属性信息可以帮助我们辨别每个线程.知道它的一些信息 ID:每一个线程的独特标示: Name:线程的名称: Prio ...
- java多线程之:创建开启一个线程的开销
---->关于时间,创建线程使用是直接向系统申请资源的,这里调用系统函数进行分配资源的话耗时不好说.---->关于资源,Java线程的线程栈所占用的内存是在Java堆外的,所以是不受jav ...
- 死磕 java线程系列之自己动手写一个线程池
欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...
- java 中有几种方法可以实现一个线程? 用什么关键字修 饰同步方法? stop()和 suspend()方法为何不推荐使用?
java5 以前, 有如下两种:第一种:new Thread(){}.start();这表示调用 Thread 子类对象的 run 方法, new Thread(){}表示一个Thread 的匿名子类 ...
- 【Java面试题】23 java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
java5 以前, 有如下两种:第一种:new Thread(){}.start();这表示调用 Thread 子类对象的 run 方法, new Thread(){}表示一个Thread 的匿名子类 ...
- 死磕 java线程系列之自己动手写一个线程池(续)
(手机横屏看源码更方便) 问题 (1)自己动手写的线程池如何支持带返回值的任务呢? (2)如果任务执行的过程中抛出异常了该怎么处理呢? 简介 上一章我们自己动手写了一个线程池,但是它是不支持带返回值的 ...
随机推荐
- 【HDOJ】1811 Rank of Tetris
并查集+拓扑排序.使用并查集解决a = b的情况. #include <iostream> #include <cstdio> #include <cstring> ...
- js键盘控制DIV移动
<style type="text/css"> html,body{overflow:hidden;}body{margin:0;padding:0;}pre{colo ...
- HDU 5920 Ugly Problem 【模拟】 (2016中国大学生程序设计竞赛(长春))
Ugly Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- Java基础(十一)常用类总结(一)
这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...
- scanf从文件中读入,printf写入到文件
重定向方式读写文件 #include <stdio.h> #define LOCAL int main() { #ifdef LOCAL freopen("input.txt&q ...
- weekend110(Hadoop)的 第七天笔记
(2015年1月31日) 课程目录 01-storm基本概念 02-storm编程规范及demo编写 03-storm的topology提交执行 04-kafka介绍 05-kafka集群部署及客户端 ...
- OpenCV 中 IplImage、CvMat、Mat中的type是怎么回事?
在使用opencv的过程中,无论使用原始的IplImage和CvMat类型,还是用最新C++版本的Mat类型,在创建和使用过程中,经常会遇到CV_8UC1.CV_8UC3.CV_32FC3等声明,我以 ...
- poj 1321 棋盘问题【dfs】
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28308 Accepted: 13996 Descriptio ...
- 【Java】集合_Collections_学习记录
一.Collections工具类概述 1.为List.Set.Map等集合提供大量方法对集合元素进行排序.查询和修改等操作. 2.将集合对象设置为不可变. 3.对集合对象实现同步控制等. 二.排序操作 ...
- 【JAVA - SSM】之SSM入门项目的搭建
最近学习了一下SSM.SSM是 Spring + SpringMVC + MyBatis 整合框架,非常适合WEB后台开发,也是当前很多人的不二选择.这篇博客带大家来创建一个学习SSM的入门程序,从搭 ...