Java中的线程的状态与生命周期
来源:互联网 发布:淘宝网品种销量排行榜 编辑:程序博客网 时间:2024/05/22 00:38
Java中使用Thread类或其子类的对象被声明并创建时,新建的线程在他的一个完整的生命周期要经历4种状态—新建,运行,中断,死亡。
Main.java
public class Main { public static void main(String []args){ SpeakDog speakDog=new SpeakDog(); SpeakCat speakCat=new SpeakCat(); speakCat.start(); speakDog.start(); for(int i=1;i<=15;i++){ System.out.print("动物"+i+" "); } }}
SpeakDog.java
public class SpeakDog extends Thread{ public void run(){ for(int i=1;i<=20;i++){ System.out.print("小狗"+i+" "); } }}
SpeakCat.java
public class SpeakCat extends Thread{ public void run(){ for(int i=1;i<=20;i++){ System.out.print("小猫"+i+" "); } }}
输出结果:
动物1 小狗1 小猫1 小狗2 动物2 小狗3 小猫2 小狗4 动物3 小狗5 小猫3 小狗6 动物4 小狗7 小猫4 小狗8 动物5 小狗9 小猫5 小狗10 动物6 小狗11 小猫6 小狗12 动物7 小狗13 小猫7 小狗14 动物8 小狗15 小猫8 小狗16 动物9 小狗17 小猫9 小狗18 动物10 小狗19 小猫10 小狗20 动物11 动物12 动物13 动物14 动物15 小猫11 小猫12 小猫13 小猫14 小猫15 小猫16 小猫17 小猫18 小猫19 小猫20
JVM首先将CPU资源分配给主线程。主线程在使用CPU资源时执行了:
SpeakDog speakDog=new SpeakDog();
SpeakCat speakCat=new SpeakCat();
speakCat.start();
speakDog.start();
并将for循环语句:
for(int i=1;i<=15;i++){
System.out.print(“动物”+i+” “);
}
执行了一次,输出了:
动物1
主线程为什么没将这个for语句执行完呢?这是因为,主线程使用CPU资源时,已经执行了:
speakCat.start();
speakDog.start();
那么JVM这是就已经有3个线程:主线程,speakDog线程,speakCat线程,需要轮流使用CPU资源,然后主线程,speakDog线程,speakCat线程三者之间相互切换,JVM轮流使用CPU资源,输出以下结果:
动物1 小狗1 小猫1 小狗2 动物2 小狗3 小猫2 小狗4 动物3 小狗5 小猫3 小狗6 动物4 小狗7 小猫4 小狗8 动物5 小狗9 小猫5 小狗10 动物6 小狗11 小猫6 小狗12 动物7 小狗13 小猫7 小狗14 动物8 小狗15 小猫8 小狗16 动物9 小狗17 小猫9 小狗18 动物10 小狗19 小猫10 小狗20 动物11 动物12 动物13 动物14 动物15 小猫11 小猫12 小猫13 小猫14 小猫15 小猫16 小猫17 小猫18 小猫19 小猫20
- Java中的线程的状态与生命周期
- 线程的生命周期与线程状态
- 13.3线程的生命周期与线程状态
- 线程的生命周期与线程状态(二)
- java 线程的生命周期和状态控制
- Java线程的生命周期和状态控制
- Java 线程的生命周期及其状态转换
- Java线程的生命周期和状态控制
- Java中的线程的生命周期
- Java SE学习笔记:线程通信、生产者与消费者案例、线程状态(线程的生命周期)、线程操作、Condition类
- 线程的生命周期 - 理解Java中线程的状态
- JAVA线程-线程状态及生命周期
- 线程的生命周期和状态
- 多线程的生命周期---理解Java里的线程状态
- Java多线程(二)、线程的生命周期和状态控制
- Java多线程(二)、线程的生命周期和状态控制
- Java多线程(二)、线程的生命周期和状态控制
- Java多线程(二)、线程的生命周期和状态控制
- 值的交换
- JS的prototype和__proto__
- Snakes and Ladders LightOJ
- Hive 1.x升级hive2.1.1全过程及与HBase的互通
- Spark算子补充<一>
- Java中的线程的状态与生命周期
- C++调用空指针对象的成员函数成功的理解
- SEO网站性能优化
- python TypeError: 'module' object is not callable
- LeetCode算法问题1 —— Add Two Numbers
- 2017.9.7 骑士 思考记录
- tomcat7.0下jndi的三种配置方式
- mongodb学习(一):centos下安装mongodb
- Centos7常用的一些命令