Java中的线程的状态与生命周期

本文通过一个Java多线程并发输出示例,展示了如何利用Thread类创建线程,并实现不同线程间的任务并发执行。具体演示了主线程与两个子线程(SpeakDog与SpeakCat)在共享CPU资源时的输出顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值