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时间片时间长度一样

​ 平均分配,一切平等

​ 有一些编程语言,线程调度模型采用的是这种方式

posted @ 2022-07-30 10:11  星余明  阅读(216)  评论(0编辑  收藏  举报