爸爸和儿子的故事带你理解java线程
今天回顾线程方面的知识,发现一个很有意思的小程序,是用来说明多线程的下面贴出来分享下,对初学者理解线程有很大的帮助
爸爸和儿子的故事
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class FatherThread extends Thread{ @Override public void run() { System.out.println("爸爸想抽烟,发现烟抽完了"); System.out.println("爸爸让儿子去买包红塔山"); Thread son = new SonThread(); son.start(); System.out.println("爸爸等儿子买烟回来"); try { //join含义:等待son线程执行完毕,father线程才继续执行 son.join(); } catch (InterruptedException e) { System.out.println("爸爸出门去找儿子跑哪去了"); System.exit(1); } System.out.println("爸爸高兴的接过烟开始抽,并把零钱给了儿子"); } } </span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class SonThread extends Thread{ @Override public void run() { String tags ="\t\t\t\t\t"; System.out.println(tags+"儿子去买烟了"); System.out.println(tags+"儿子去买烟要10分钟"); try { for(int i =0; i<10;){ Thread.sleep(1000); System.out.println(tags+"儿子出去第"+ ++i +"分钟"); } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(tags+"儿子去买烟回来了"); } } </span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class Main { public static void main(String[] args){ System.out.println("爸爸和儿子的故事"); Thread faThread =new FatherThread(); faThread.start(); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
} </span>
运行结果
爸爸和儿子的故事
爸爸想抽烟,发现烟抽完了
爸爸让儿子去买包红塔山
爸爸等儿子买烟回来
儿子去买烟了
儿子去买烟要10分钟
儿子出去第1分钟
儿子出去第2分钟
儿子出去第3分钟
儿子出去第4分钟
儿子出去第5分钟
儿子出去第6分钟
儿子出去第7分钟
儿子出去第8分钟
儿子出去第9分钟
儿子出去第10分钟
儿子去买烟回来了
爸爸高兴的接过烟开始抽,并把零钱给了儿子
程序进入主函数,首先father线程开始执行。爸爸让儿子去买烟,然后等待儿子买烟回来,这时son线程启动10分钟后儿子回来fathrer线程继续执行。
爸爸和儿子的故事带你理解java线程相关推荐
- 一文带你理解Java中Lock的实现原理
转载自 一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题.java提供了两种方式来加锁,一种是关键字:synchron ...
- 关于深入理解Java线程
关于深入理解Java线程 一.线程基础 1.进程和线程 进程 线程 进程与线程的区别 进程间通信方式 2.线程的同步互斥 线程同步: 线程互斥: 四种线程同步互斥的控制方法 3.上下文切换(Conte ...
- 并发编程之深入理解java线程
并发编程之深入理解java线程 一.线程基础知识 1.1 进程和线程 1.1.1 进程 1.1.2 线程 1.1.3 进程与线程的区别 1.1.4 进程间通信的方式 1.2 线程的同步互斥 1.3 上 ...
- 深入理解JAVA线程池
深入理解JAVA线程池 前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致O ...
- 并发编程四:深入理解java线程
文章目录 深入理解java线程 线程基础知识 线程的同步互斥 上下文切换(Context switch) 线程的生命周期 操作系统层面线程生命周期 Java线程的生命周期 java线程详解 java线 ...
- 一文带你理解Java中自动装箱和拆箱
Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...
- 深入理解 Java 线程池!
作者 | 阿文,责编 | 郭芮 头图 | CSDN 下载自东方IC 出品 | CSDN(ID:CSDNnews) 在多线程和高并发场景中,需要创建大量的线程来进行业务处理,我们通常创建线程有两种方法, ...
- Java线程与Android线程,Android线程篇(三):深入理解Java线程池(一)
上篇文章我们讲解了Java的四种线程池,我们知道如何去使用四种线程池,以及在合适的情况下使用合适的线程池,常言道,不懂原理的厨师不是好的程序员,所以本篇文章,就带大家一起去探寻Java线程池的秘密. ...
- Java基础——深入理解Java线程池
简介 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因 ...
最新文章
- Thinking In Machine Learning
- 在JConsole和VisualVM中查看DiagnosticCommandMBean
- 安全模式下修复电脑故障
- 如何让Sublime Text2支持GBK编码
- python xlwings api_Python - xlwings基本使用
- 动态路由接收前台传值
- 为什么Python是数据科学领域最受欢迎的语言之一?
- 如何排查 Kubernetes 的内存增长问题?
- CentOS7开机自动加载驱动方法
- STATA软件进行meta分析,在界面显示meta分析
- 网站优化众说纷纭 往左走还是往右走?
- 如何提高自身数学分析水平?
- 递归解决卖桃子问题java
- (一)Java网络编程之计网基础、TCP-IP协议簇、TCP、UDP协议及腾讯QQ通信原理综述
- 海康ISAPI透传ftp
- 延迟微分方程(matlab求解)
- JAVA通过auth_code获取支付宝账户信息
- Java 堆默认大小
- python折叠次数计算、一张纸5毫米_一张纸折叠多次后会怎样?计算机模拟得出,它能突破宇宙范围...
- MySQL 查询排名
热门文章
- linux Boot目录满了之后的解决方法
- springboot集成mongoDB 异常认证
- “C# 未在本地计算机上注册microsoft.Jet.OLEDB.12.0”的解决方案
- “MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。”的解决方案
- 为什么更改总和顺序会返回不同的结果?
- 我可以编写一个CSS选择器来选择不具有某个类或属性的元素吗?
- JSF,Servlet和JSP有什么区别?
- linux+查看系统环境路径,Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH
- Win11系统如何打开地雷游戏 Win11打开扫雷游戏的教程
- php的toast,Windows通知服务:401尝试在PHP中创建Toast通知时无效令牌