为什么运行时前几次那么乱呢,一会先生一会女士。不规律

来源:2-3 Java线程-隋唐演义实战开发---演员简介

qq_慕函数8456880

2019-04-23 17:20

package com.xuanxuan;


public class Actor extends Thread {

public void run() {

System.out.println(getName()+"是一个演员");

int count=0;

boolean keepRuning=true;

while(keepRuning) {

System.out.println(getName()+"登台演出"+(++count));

if(count==100) {

keepRuning=false;

}

if(count%10==0) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

System.out.println(getName()+"演出结束了");

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Thread actor=new Actor();

actor.setName("先生");

Thread actressThread=new Thread(new Actress(),"xiaoxiaoxiao女士");

actor.start();

actressThread.start();

}


}

class Actress implements Runnable{

public void run() {

System.out.println(Thread.currentThread().getName()+"是一个演员");

int count=0;

boolean keepRuning=true;

while(keepRuning) {

System.out.println(Thread.currentThread().getName()+"登台演出"+(++count));

if(count==100) {

keepRuning=false;

}

if(count%10==0) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

System.out.println(Thread.currentThread().getName()+"演出结束了");

}

}

https://img4.mukewang.com/5cbed89900010a5903580808.jpg

写回答 关注

2回答

  • qq_慕函数3578806
    2020-05-13 20:56:14

    学了操作系统,你应该知道一些进程调度算法吧。先生在调用Thread.sleep(1000)后,表明 在接下来的 1000ms内 先生不参与CPU的竞争,1000ms结束时,cpu并不一定分配给先生,因为windows 的操作系统采用的是 抢占式进程调度算法,进程的优先级 根据等待时间或其它因素 是动态变化的,这时候可能会有 其它进程的优先级比“先生”高,因此先生只能等着。因为 先生 和 女士 的优先级不停变化,所以可能会不规律的被调度。

  • 慕桂英6112892
    2019-04-24 14:22:37

    两个线程争夺cpu资源,可以参考https://blog.csdn.net/u014360189/article/details/45182277

深入浅出Java多线程

带你一起深入浅出多线程,掌握基础,展望进阶路线

186088 学习 · 464 问题

查看课程

相似问题