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多线程并发输出示例,展示了如何利用Thread类创建线程,并实现不同线程间的任务并发执行。具体演示了主线程与两个子线程(SpeakDog与SpeakCat)在共享CPU资源时的输出顺序。
1220

被折叠的 条评论
为什么被折叠?



