Java的抢占式调度
关于线程的调度
一、抢占式调度模型
哪个线程的优先级比较高,抢到的cpu时间片的概率就高一点。
java采用的就是抢占式的调度方法
1、java中是关于优先级的
①、setPriority(int newPriority)
更改此线程的优先级。
②、int getPriority
返回此线程的优先级
- java中默认优先级是5
- 最低优先级是0,最高优先级是10
- 优先级比较高的,获取时间片可能会多一点
代码示例:
public class ThreadTest11 {
public static void main(String[] args) {
System.out.println("最高优先级" + Thread.MAX_PRIORITY);
System.out.println("最低优先级" + Thread.MIN_PRIORITY);
System.out.println("默认优先级" + Thread.NORM_PRIORITY);
//获取当前线程的优先级
Thread currentThread = Thread.currentThread();
System.out.println("获取当前线程的优先级" + currentThread.getPriority());
Thread t=new Thread(new Thread11());
t.setName("t");
t.setPriority(4);
System.out.println("t线程的优先级是"+t.getPriority());
}
}
class Thread11 implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"线程的默认优先级是"+Thread.currentThread().getPriority());
}
}
输出:
最高优先级10
最低优先级1
默认优先级5
获取当前线程的优先级5
t线程的优先级是4
③、 静态方法:public static void yield()
对调度程序的一个暗示,即当前线程愿意产生当前使用的处理器。 调度程序可以自由地忽略这个提示。yield()不是阻塞,相当于回到就绪!
④、void join()合并线程
举例:
calss Thread01 extends Thread{
public void do(){
Thread2 t=new Thread02;
t.join//在此处当前线程进入阻塞,t线程执行,t线程执行之后,执行当前线程
}
}
class Thread2 extends Thread{
}
二、均分式调度模型
平均分配cpu时间片,每个线程占用的cpu时间片时间长度一样
平均分配,一切平等
有一些编程语言,线程调度模型采用的是这种方式
本文来自博客园,作者:星余明,转载请注明原文链接:https://www.cnblogs.com/lingstar/p/16534430.html