今天回顾线程方面的知识,发现一个很有意思的小程序,是用来说明多线程的下面贴出来分享下,对初学者理解线程有很大的帮助

爸爸和儿子的故事

<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线程相关推荐

  1. 一文带你理解Java中Lock的实现原理

    转载自   一文带你理解Java中Lock的实现原理 当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题.java提供了两种方式来加锁,一种是关键字:synchron ...

  2. 关于深入理解Java线程

    关于深入理解Java线程 一.线程基础 1.进程和线程 进程 线程 进程与线程的区别 进程间通信方式 2.线程的同步互斥 线程同步: 线程互斥: 四种线程同步互斥的控制方法 3.上下文切换(Conte ...

  3. 并发编程之深入理解java线程

    并发编程之深入理解java线程 一.线程基础知识 1.1 进程和线程 1.1.1 进程 1.1.2 线程 1.1.3 进程与线程的区别 1.1.4 进程间通信的方式 1.2 线程的同步互斥 1.3 上 ...

  4. 深入理解JAVA线程池

    深入理解JAVA线程池 前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致O ...

  5. 并发编程四:深入理解java线程

    文章目录 深入理解java线程 线程基础知识 线程的同步互斥 上下文切换(Context switch) 线程的生命周期 操作系统层面线程生命周期 Java线程的生命周期 java线程详解 java线 ...

  6. 一文带你理解Java中自动装箱和拆箱

    Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...

  7. 深入理解 Java 线程池!

    作者 | 阿文,责编 | 郭芮 头图 | CSDN 下载自东方IC 出品 | CSDN(ID:CSDNnews) 在多线程和高并发场景中,需要创建大量的线程来进行业务处理,我们通常创建线程有两种方法, ...

  8. Java线程与Android线程,Android线程篇(三):深入理解Java线程池(一)

    上篇文章我们讲解了Java的四种线程池,我们知道如何去使用四种线程池,以及在合适的情况下使用合适的线程池,常言道,不懂原理的厨师不是好的程序员,所以本篇文章,就带大家一起去探寻Java线程池的秘密. ...

  9. Java基础——深入理解Java线程池

    简介 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因 ...

最新文章

  1. Thinking In Machine Learning
  2. 在JConsole和VisualVM中查看DiagnosticCommandMBean
  3. 安全模式下修复电脑故障
  4. 如何让Sublime Text2支持GBK编码
  5. python xlwings api_Python - xlwings基本使用
  6. 动态路由接收前台传值
  7. 为什么Python是数据科学领域最受欢迎的语言之一?
  8. 如何排查 Kubernetes 的内存增长问题?
  9. CentOS7开机自动加载驱动方法
  10. STATA软件进行meta分析,在界面显示meta分析
  11. 网站优化众说纷纭 往左走还是往右走?
  12. 如何提高自身数学分析水平?
  13. 递归解决卖桃子问题java
  14. (一)Java网络编程之计网基础、TCP-IP协议簇、TCP、UDP协议及腾讯QQ通信原理综述
  15. 海康ISAPI透传ftp
  16. 延迟微分方程(matlab求解)
  17. JAVA通过auth_code获取支付宝账户信息
  18. Java 堆默认大小
  19. python折叠次数计算、一张纸5毫米_一张纸折叠多次后会怎样?计算机模拟得出,它能突破宇宙范围...
  20. MySQL 查询排名

热门文章

  1. linux Boot目录满了之后的解决方法
  2. springboot集成mongoDB 异常认证
  3. “C# 未在本地计算机上注册microsoft.Jet.OLEDB.12.0”的解决方案
  4. “MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。”的解决方案
  5. 为什么更改总和顺序会返回不同的结果?
  6. 我可以编写一个CSS选择器来选择不具有某个类或属性的元素吗?
  7. JSF,Servlet和JSP有什么区别?
  8. linux+查看系统环境路径,Linux环境变量设置方法总结 PATH、LD_LIBRARY_PATH
  9. Win11系统如何打开地雷游戏 Win11打开扫雷游戏的教程
  10. php的toast,Windows通知服务:401尝试在PHP中创建Toast通知时无效令牌