爸爸和儿子的故事带你理解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线程的更多相关文章
- 一个故事带你理解if __name__ == '__main__'
		如果你刚刚接触python,相信会在看别人的程序的时候会遇到if __name__ == '__main__'酱紫的语法,如果当时没看懂现在也一知半解的话,看下去,本文可以帮你解决这个问题. 大家都知 ... 
- 深入理解Java线程池:ScheduledThreadPoolExecutor
		介绍 自JDK1.5开始,JDK提供了ScheduledThreadPoolExecutor类来支持周期性任务的调度.在这之前的实现需要依靠Timer和TimerTask或者其它第三方工具来完成.但T ... 
- 深入理解 Java 线程池
		一.简介 什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 为什么要用线程池 如果并发请求数量很多,但每个线程执行的时间很短,就会出现频繁的创建 ... 
- 一篇漫画故事带你理解透HTTPS(下)
		上下集知识点总结: 前情提要: 蝙蝠纪元,疫情之下.二丫欲访问京东购物,不料弹出安全提示,遂找二毛一探究竟.二毛一顿排查后,开始用通俗易懂的语言深入浅出的向二丫解释 HTTP作用及优缺点.HTTPS的 ... 
- 一篇漫画故事带你理解透HTTPS(上)
		2020年蝙蝠纪元,二毛一如往常的呆在家中,不敢外出去浪. 为排解心中之闷,二毛抽了一口老烟,熟练的打开了全球最大的同性交友网站,准备假装了解下最近流行的项目... 只听啪的一声回车键,哪知浏览器蹦出 ... 
- 理解java线程的中断(interrupt)
		一个线程在未正常结束之前, 被强制终止是很危险的事情. 因为它可能带来完全预料不到的严重后果比如会带着自己所持有的锁而永远的休眠,迟迟不归还锁等. 所以你看到Thread.suspend, Threa ... 
- 07深入理解Java线程池
		之前面试baba系时遇到一个相对简单的多线程编程题,即"3个线程循环输出ADC",自己答的并不是很好,深感内疚,决定更加仔细的学习<并发编程的艺术>一书,到达掌握的强度 ... 
- 理解Java线程
		使用多线程的目的是更好的利用cpu资源,大部分多线程代码都可以用单线程来实现,但也有无法用单线程实现的,如:生产者消费者模型 下面对一些常用的概念进行区分: 多线程:指的是这个程序(一个进程)运行时产 ... 
- 深入理解Java线程池
		我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁 ... 
随机推荐
- python  strip() 函数探究
			strip()方法语法:str.strip([chars]); 声明:str为字符串,rm为要删除的字符序列 str.strip(rm) 删除字符串中开头.结尾处,位于rm删除序列的字符 eg1: # ... 
- freopen()重定向的打开和关闭
			freopen函数 功能 使用不同的文件或模式重新打开流,即重定向. 实现重定向,把预定义的标准流文件定向到由path指定的文件中.(直观感觉/实际操作都像是把文件定向到流,难道是说,对流来说就是重定 ... 
- 【原创】如何编写c#用户登陆后用户名在前台显示
			这种肯定是判断session啦!!!!! @{ string username = (string)Session["username"]; user user = new use ... 
- asp.net的请求管道事件
			一.引言 上篇介绍了Http的请求过程提到了在请求进入到创建完 HttpApplication 对象后,将进入一系列的处理事件Event,那么这些事件具体都有哪些呢,这篇文章就来简要阐述一下. 二.正 ... 
- node.js编译less文件
			大多数文章对于到底怎样编译less文件并没有一个详细的说明,清一色的grunt命令,看得也是晕晕的,所以也就有了这篇手记的存在. 步入正题 1.安装配置好sublime text3(包括各种实用插件) ... 
- PHP生成文档,并把数据加入文档的小案例
			PHP生成文档,可以利用file_put_contents($filename, $data),其中$filename表示文档名,$data表示需要放入的数据, 若存放的是数组,这还需要使用seria ... 
- left_v2.js
			$(document).ready(function(){ $(".mc_left a").each(function(){ var href = $(this).attr(&qu ... 
- Spring接收web请求参数的几种方式
			1 查询参数 请求格式:url?参数1=值1&参数2=值2...同时适用于GET和POST方式spring处理查询参数的方法又有几种写法: 方法一:方法参数名即为请求参数名 // 查询参数1 ... 
- tomcat时间与系统时间不一致问题
			我在部署应用到centos系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的访问日志的时间与系统时间不一致,但是查看当前操作系统的时区也是CST时区(中国标准时区). 查看系统的时 ... 
- linux下安装flash player
			下载flash player,选择.tar.gz for other linux. 网址:http://get.adobe.com/flashplayer/ Ctrl+Alt+T进入终端: 进入下载所 ... 
