线程入门-使用Thread类
2019独角兽企业重金招聘Python工程师标准>>>
发射倒计时程序:
/*** Created by Administrator on 2017/8/31.*/ public class LiftOff implements Runnable {protected int countDown = 10;private static int taskCount = 0;private final int id = taskCount++;public LiftOff() {}public LiftOff(int countDown) {this.countDown = countDown;}public String status() {return "#" + id + "(" +(countDown > 0 ? countDown : "LiftOff!") + ")";}@Overridepublic void run() {while (countDown-- > 0) {System.out.print(status());Thread.yield();}}}
如何驱动
示例1:
在下面的示例中,这个任务的run()不是由单独的线程驱动的,它是在main()中直接调用的
/*** Created by Administrator on 2017/8/31.*/ public class MainThread {public static void main(String[] args) {LiftOff launch = new LiftOff();launch.run();System.out.println("等待发射\r\n");} }
输出结果:
总结:当从runnable导出一个类时,它必须具有run()方法,但是这个方法并无特殊之处,它不会产生任何内在的线程能力。要实现线程行为,你必须显式地将一个任务附着到线程上。
示例二:
/*** Created by Administrator on 2017/8/31.*/ public class MainThread {public static void main(String[] args) {/* LiftOff launch = new LiftOff();launch.run();System.out.println("\r\n等待发射\r\n");*/Thread t = new Thread(new LiftOff());t.start();System.out.println("等待发射!");} }
输出结果:
总结:将Runnable对象转变为工作任务的传统方式是把它提交给一个Thread构造器,start()起新线程,run在新起线程中启动该任务。
尽管start()看起来是产生了一个对长期运行方法的调用,但是从输出中可以看到,start()迅速地返回了,因为“等待发射!"消息在倒计时完成之前就出现了。实际上,你产生的是对LiftOff.run()的方法调用,并且这个方法还没有完成,但是因为LiftOff.run()是由不同的线程执行的,因此你仍旧可以执行main()线程中的其他操作,因些程序会同时运行2个方法,main()和LiftOff.run()是程序中与其他线程”同时“执行的代码。
示例三:
添加更多的线程
/*** Created by Administrator on 2017/8/31.*/ public class MainThread {public static void main(String[] args) {for (int i = 0; i < 5; i++) {new Thread(new LiftOff()).start();}System.out.print("等待发射\r\n");} }
输出:每次执行结果不惟一
结论:输出说明不同的任务的执行在线程被换进换出时混在了一起。这种交换是由线程调度器自动控制的。
转载于:https://my.oschina.net/u/560971/blog/1527075
线程入门-使用Thread类相关推荐
- Java多线程-线程的创建(Thread类的基本使用)
文章目录 一. 线程和Thread类 1. 线程和Thread类 1.1 Thread类的构造方法 1.2 启用线程的相关方法 2. 创建第一个Java多线程程序 3. 使用Runnable对象创建线 ...
- java 继承thread_java线程-创建线程(继承 Thread 类)
1.创建线程的方式 线程创建方式是:继承 Thread 类,重写 run 方法.如下:public class Task extends Thread{ @Override public void r ...
- Python 批量创建线程及threading.Thread类的常用函数及方法
在<[Python]线程的创建.执行.互斥.同步.销毁>(点击打开链接)中介绍了Python中线程的使用,但是里面线程的创建,使用了很原始的方式,一行代码创建一条.其实,Python里是可 ...
- Python入门之——线程threading(Thread类)简介
几乎所有的操作系统都支持同时运行多个任务,每个任务通常是一个程序,每一个运行中的程序就是一个进程,即进程是应用程序的执行实例.现代的操作系统几乎都支持多进程并发执行.注意,并发和并行是两个概念,并行指 ...
- java基础 通过继承Thread类和实现Runnable接口创建线程
java 创建线程 Java中,线程也是一种对象,但不是任何对象都可以成为线程. 只有实现了Runnable接口或继承了Thread类的对象才能成为线程. 继承Thread类 //格式: class ...
- Thread类源码解读(2)——线程状态及常用方法
上一篇我们讨论了线程的创建,本篇我们来聊一聊线程的状态转换以及常用的几个比较重要的方法. 本篇依然是通过源码分析来了解这些知识. 本文源码基于jdk1.8 . 阅读完本文,你应当有能力回答以下常见面试 ...
- 【高并发】一个工作了7年的朋友去面试竟然被Thread类虐的体无完肤
前言 最近和一个工作了7年的朋友聊天,他跟我说起了他去XXX公司面试的情况,面试官的一个问题把他打懵了!竟然问他:你经常使用Thread类创建线程,那你看过Thread类的源码吗?Thread类创建线 ...
- java线程学习-Thread.currentTread().getName()和this.getName()的区别
很久没有写java程序了,由于为了改变目前的状况,打算花两天时间学习一下java的线程开发和高并发. 线程开发使用thread类,或者runnable接口,而且thread类也是实现了runnable ...
- Thread类学习(一)
Thread类API中的英文描述: file:///D:/Java/JDK8/Docs/docs/api/index.html 英语不好,大致的意思是: 线程是程序执行时的线程,java虚拟机(JVM ...
最新文章
- 展望下一代语言:Fortress, Chapel or X10(转)
- linux怎么修改sftp默认端口,如何在 Linux 系统中如何更改 SFTP 端口
- 某班学生有50人会c语言的有40人,《离散数学》期末考试题目及评分标准
- Apache Shiro 简介
- 【白皮书分享】2021年互联网人才招聘白皮书.pdf(附下载链接)
- 你是如何管理你的时间的?-----时间管理与树的遍历
- Hyper-V实战:高可用性-配置Hyper-V群集
- 西门子plc cpu228 4路模拟量输入 2路模拟量输出
- linux服务器如何查看硬盘型号,Linux如何查看硬盘型号和缓存
- webview的白屏,和硬件加速
- 【论文笔记(2)】图卷积网络介绍 Understanding Convolutions on Graphs
- 寒武纪“失速”,是AI芯片行业的阵痛?
- 图像评价指标——PSNR、SSIM、FID、KID
- TiDB+TiSpark部署--安装,扩缩容及升级操作
- ROBOMASTER比赛作品集_邹俊添
- 【渝粤教育】国家开放大学2018年秋季 0088-21T保险学概论 参考试题
- c语言 前置声明,C语言编程开发前置声明都有哪些作用
- 安卓开发之SoundPool播放音效
- GDPR is coming!
- 解决宝塔安装wordpress无法连接到数据库问题