线程的调度:
多个线程被CPU执行的时候涉及到CPU调度的策略,CPU正常采用的是时间片策略,我们也可以设置线程的优先级,CPU在切换线程的时候优先考虑优先级高的线程
线程的优先级
有十个档次:从1到10
三个常量(定义在Thread类当中):
MAX_PRIORITY:表示10
MIN_PRIORITY:表示1
NORM_PRIORITY:表示5(默认的优先级)
获取和设置当前线程的优先级
- getPriority();
- setPriority(int p);
package test01;
public class ThreadDemo {
public static void main(String[] args) {
//设置优先级记得在start方法执行之前做
fun f=new fun();
f.setPriority(Thread.MAX_PRIORITY);//也可以写成f.setPriority(10);注意如果想用7,8之类设置优先级的只能这样用具体的数字
f.start();
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
for(int i=0;i<5;i++){
if(i%2==0){
System.out.println(i+":"+Thread.currentThread().getPriority());
}
}
}
}
class fun extends Thread{
@Override
public void run() {
for(int i=0;i<5;i++){
if(i%2==0){
System.out.println(i+":"+getPriority());//getPriority()就是this.getPriority(),this就是线程,所以不用像main中那样写成Thread.currentThread().getPriority()
}
}
}
}
注意: 并不是说分线程的优先级高,就会执行完分线程才执行主线程,只是说从概率上来说同一时间分线程更可能被CPU执行,并不是百分百一定执行分线程