為什么運行時前幾次那么亂呢,一會先生一會女士。不規律
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()+"演出結束了");
}
}
2020-05-13
學了操作系統,你應該知道一些進程調度算法吧。先生在調用Thread.sleep(1000)后,表明 在接下來的 1000ms內 先生不參與CPU的競爭,1000ms結束時,cpu并不一定分配給先生,因為windows 的操作系統采用的是 搶占式進程調度算法,進程的優先級 根據等待時間或其它因素 是動態變化的,這時候可能會有 其它進程的優先級比“先生”高,因此先生只能等著。因為 先生 和 女士 的優先級不停變化,所以可能會不規律的被調度。
2019-04-24
兩個線程爭奪cpu資源,可以參考https://blog.csdn.net/u014360189/article/details/45182277