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()+"演出结束了");
}
}
学了操作系统,你应该知道一些进程调度算法吧。先生在调用Thread.sleep(1000)后,表明 在接下来的 1000ms内 先生不参与CPU的竞争,1000ms结束时,cpu并不一定分配给先生,因为windows 的操作系统采用的是 抢占式进程调度算法,进程的优先级 根据等待时间或其它因素 是动态变化的,这时候可能会有 其它进程的优先级比“先生”高,因此先生只能等着。因为 先生 和 女士 的优先级不停变化,所以可能会不规律的被调度。
两个线程争夺cpu资源,可以参考https://blog.csdn.net/u014360189/article/details/45182277
深入浅出Java多线程
186088 学习 · 464 问题
相似问题