美文网首页
多线程之(线程的优先级与让步)

多线程之(线程的优先级与让步)

作者: 新征程Dream | 来源:发表于2020-07-04 15:48 被阅读0次

这两个玩意比较玄,以理解为主。

线程的优先级

设置线程的优先级的参数越大,优先级越高。

我们应该知道,线程只有抢到CPU执行权,才会被执行。我们可以人为的提高某个线程的优先级,让他抢到CPU执行权的几率大一点。但是,抢到CPU的记录率大,但并不代表每次都能抢到CPU的执行权,这一点我们应该明确。比如,某个公司在举行年度聚会的抽奖环节,老板的小舅子也参与其中,于是抵不过老板娘的压力,偷偷给小舅子两张抽奖券,让小舅子的获奖记录大一点,但不代表小舅子能一定获奖。
回到代码层面

package cn.zl.ThreadTest;
public class ThreadDemo1 {
    public static void main(String[] args) {
        // 创建线程A
        Thread threadA = new Thread(new ThreadA());
        Thread threadB = new Thread(new ThreadB());
        // 设置优先级
        // Thread.MAX_PRIORITY 值为:10;
        // Thread.MIN_PRIORITY 值为:1;
        // Thread.NORM_PRIORITY 值为:5;
        threadA.setPriority(Thread.MAX_PRIORITY);
        threadA.setPriority(Thread.MIN_PRIORITY);
        // 线程跑起来
        threadA.start();
        threadB.start();
    }
}
// 搞两个线程
class ThreadA implements Runnable{
    private int num = 1000;
    public void run() {
        while (num>0){
            System.out.println("线程A"+" "+num);
            num--;
        }
    }
}
class ThreadB implements Runnable{
    private int num = 1000;
    public void run() {
        while (num>0){
            System.out.println("线程B"+" "+num);
            num--;
        }
    }
}

你可以测试100次,统计一下,线程A和线程B的先执行完的次数。
获取线程的优先级

// 获取线程的优先级
        int priorityA = threadA.getPriority();
        int priorityB = threadB.getPriority();
        System.out.println(priorityA);
        System.out.println(priorityB);

线程让步

线程让步就是调用线程的yield() 方法,它可以让当前的线程由"运行状态"进入"就绪状态",也就说让抢占到CPU执行权的线程,让出线程的执行权,大家再来抢。例如:还拿公司的年会抽奖,老板也获得一票,于是老板为了展现自己的大度,就放弃本地抽奖的机会。并不代表,明年的年会抽奖老板,不会获奖。大概就是这么个意思。
回到代码层面

package cn.zl.ThreadTest;
public class ThreadDemo1 {
    public static void main(String[] args) {
        // 创建线程A
        Thread threadA = new Thread(new ThreadA());
        Thread threadB = new Thread(new ThreadB());
        // 线程跑起来
        threadA.start();
        threadB.start();
    }
}

// 搞两个线程
class ThreadA implements Runnable{
    private int num = 1000;
    public void run() {
        while (num>0){
            // 当num值为100的时候,让出线程A的执行权。
            if (num==100){
                Thread.yield();
            }
            System.out.println("线程A"+" "+num);
            num--;
        }
    }
}

class ThreadB implements Runnable{
    private int num = 1000;
    public void run() {
        while (num>0){
            System.out.println("线程B"+" "+num);
            num--;
        }
    }
}

当前,肯定也存在线程A在num=100 的时候,让出了执行权,但是又抢到了。也可以多测试几次,现象可能会更加的明显。

相关文章

  • 多线程之(线程的优先级与让步)

    这两个玩意比较玄,以理解为主。 线程的优先级 设置线程的优先级的参数越大,优先级越高。 我们应该知道,线程只有抢到...

  • 多线程

    简单讲解了关于多线程的一些应用:线程进程的概念区别,定义多线程,多线程之间的通信,线程的死锁,以及线程的优先级。此...

  • 《Java 多线程精选》思维导图

    本文主要分析了 Java 多线程的精选内容 1.进程和线程 2.Java 多线程编程入门 3.线程组和线程优先级 ...

  • Java程序员福利——阿里架构师详解Java多线程常用方法的使用

    前言 Java多线程的常用方法基本分为:获取当前线程的操作,线程休眠sleep()方法,线程让步yield()方法...

  • 多线程《API》相关_简单了解2

    gcd相关API的简单使用 多线程优先级简单探索

  • Reentranlock

    Java多线程(九)之ReentrantLock与Condition

  • Win32多线程处理技术【线程的创建】

    线程的创建 线程内核对象 线程的终止 线程的优先级 Windows程序的执行单元 多线程 进程---主线程---辅...

  • T

    1 线程与进程概念2 实现多线程的两种手段,区别3 线程状态转换4 线程调度 优先级 并发编程的目的是为了让程序运...

  • 多线程技术概述

    多线程技术概述 Java使用的为抢占式调度。优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一...

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

网友评论

      本文标题:多线程之(线程的优先级与让步)

      本文链接:https://www.haomeiwen.com/subject/pdyuqktx.html