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