java调度模型及优先级,线程调度及优先级 - 1024菜bird的个人空间 - OSCHINA - 中文开源技术交流社区...

线程的调度与控制

CPU 在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是CPU的使用权,才可以执行指令。在单CPU 的机器上线程不是并行运行的,只是各线程在不断的切换执行,感觉上像是并行执行。只有在多个CPU 上的线程才可以并行运行,每个CPU执行一个线程(是理想状态),即使是多个CPU的计算机,每个CPU也在同时执行着多个进程或线程。Java 虚拟机负责线程的调度,取得CPU 的使用权分配给不同的线程。CPU调度模型分为:分时调度模型和抢占式调度模型,Java 使用抢占式调度模型。分时调度模型:所有线程轮流得到CPU 的使用权,平均分配每个线程占用CPU 的时间片。抢占式调度模型:优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个,优先级高的线程获取的CPU 时间片相对要多一些。

线程的优先级

在Java中,线程是可以设置执行优先级的。Thread类中有三个静态变量,用来表示线程的优先级。线程的的优先级从1~10,1的优先级最低,10的优先选最高,默认情况下的优先级是5。Java中线程的优先级默认是5。

MAX_PRIORITY:优先级最高,值为10

MIN_PRIORITY:优先级最低,值为1

NORM_PRIORITY:默认优先级,值为5

public class SvnVersion {

public static void main(String[] args){

Thread thread = new Process01();

thread.start();

System.out.println("最大优先级:"+Thread.MAX_PRIORITY);

System.out.println("最大优先级:"+Thread.NORM_PRIORITY);

System.out.println("最大优先级:"+Thread.MIN_PRIORITY);

}

}

class Process01 extends Thread{

public void run (){

System.out.println("输出当前线程优先级:"+this.getPriority());

}

}

对应线程的执行优先级可以手动进行设置,需要使用线程对象的成员方法setPriority()。

public class SvnVersion {

public static void main(String[] args) throws InterruptedException{

ExecutorService eService=Executors.newFixedThreadPool(5);

for(int i=1;i<=10;i++){

Thread thread=new Process01();

thread.setPriority(i);

eService.submit(thread);

}

Thread.currentThread().setPriority(10);

for (int i = 0; i < 10; i++) {

System.out.println("main:"+i);

}

}

}

class Process01 extends Thread{

public void run (){

System.out.println("输出当前子线程优先级:"+this.currentThread().getName()+"--"+this.getPriority());

for (int i = 0; i < 10; i++) {

System.out.println("子线程:"+this.currentThread().getName()+"--"+i);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值