线程的调度

  * 单核CPU在某一时刻只能执行一条指令,线程只有得到CPU的时间片,也就是使用权,才可以执行指令

  * 在单核CPU的机器上线程不是并行运行的,而是频繁切换运行的,只有在多个CPU上线程才可能并行运行。

  * Java虚拟机要负责线程的调度,取得CPU的使用权,目前有两种调度模式:**分时式调度模式**  和  **抢占式调度模式**, **java是后者**

  * 两种调度模式:

      - 分时式调度模式:所有线程轮流获得CPU的使用权,平均分配每个线程所占用CPU的时间片

      - 抢占式调度模式:优先让优先级高的线程使用CPU,如果所有线程的优先级相同,会随机选择一个,优先级高的线程获取的CPU时间片相对多一些。

线程的优先级

  • 线程优先级分为三种, 最高优先级是10, 最低优先级是1, 默认优先级是5.

    • MAX_PRIPRITY 最高 System.out.println(Thread.MAX_PRIORITY); 10

    • MIN_PRIORITY 最低 System.out.println(Thread.MIN_PRIORITY); 1

    • NORM_PRIORITY 默认 System.out.println(Thread.NORM_PRIORITY); 5

  • 设置线程的优先级

    • 查看当前线程的优先级: 线程对象.getPriority()

    • 设置线程优先级: 线程对象.setPriority(int newPriority) 例如: t1.setPriority(10); //优先级设置为10 最高优先级

  • 代码实例

      package com.shige.Thread;
    
      public class ThreadTest04 {
    public static void main(String[] args) { //获取当前线程对象,并重写起一个名字
    Thread.currentThread().setName("主线程"); //创建一个线程对象
    Thread thread=new Thread(new Processor_4()); //给thread线程重新起一个名字
    thread.setName("副线程1"); //创建第二个线程对象
    Thread thread1=new Thread(new Processor_4()); //给thread1线程重新起一个名字
    thread1.setName("副线程2"); //查看当前线程的优先级
    System.out.println(Thread.currentThread().getPriority()); //主线程优先级 5
    System.out.println(thread.getPriority()); //thread线程优先级 5
    System.out.println(thread1.getPriority()); //thread1线程优先级 5 //设置线程优先级
    Thread.currentThread().setPriority(1);
    thread.setPriority(10);
    thread1.setPriority(2); //启动线程
    thread.start();
    thread1.start(); //主线程 对比for循环
    for (int i = 0; i < 50; i++) {
    System.out.println(Thread.currentThread().getName()+"------>"+i); } //优先级常量 System.out.println(Thread.MAX_PRIORITY); //10
    System.out.println(Thread.MIN_PRIORITY); //1
    System.out.println(Thread.NORM_PRIORITY); //5 }

}


//定义一个线程,实现Runnable接口
class Processor_4 implements Runnable{ //实现run()方法
@Override
public void run() {
for (int i = 0; i <50 ; i++) { //获取当前线程名字,并输出i值
System.out.println(Thread.currentThread().getName()+"------------->"+i); }
}
}

Day13_64_线程的优先级的更多相关文章

  1. C#夯实基础之多线程三:线程的优先级

    一.为什么需要优先级--线程调度的问题 在现实生活中,优先级是一个很常见的现象:在火车站,如果你是孕妇,你是可以走进站中的专门绿色通道的,可以提前上火车以免拥挤:火警119匪警110出警的时候,都是人 ...

  2. java 22 - 6 多线程之线程调度和设置线程的优先级

    线程调度 假如我们的计算机只有一个 CPU,那么 CPU 在某一个时刻只能执行一条指令,线程只有得到 CPU时间片,也就是使用权,才可以执行指令. 那么Java是如何对线程进行调用的呢? 线程有两种调 ...

  3. java 线程的优先级

    //线程的优先级 //线程1 class xc1 implements Runnable{ public void run(){ for(int i=0;i<20;i++){ System.ou ...

  4. java笔记--查看和修改线程的优先级

    查看和修改线程的优先级 java中每一个线程都有优先级属性,在默认情况下,新建的线程的优先级与创建该线程的线程优先级相同.每当线程调度器选择要运行的线程时,通常选择优先级较高的线程. 注:线程的优先级 ...

  5. Android(java)学习笔记63:线程的优先级

    1. Java线程的优先级从1到10级别,值越大优先级越高线程默认优先级是5.值越大优先级越高 (1) 继承自Thread类创建线程类: package cn.itcast_04; public cl ...

  6. Java 并发 线程的优先级

    Java 并发 线程的优先级 @author ixenos 低优先级线程的执行时刻 1.在任意时刻,当有多个线程处于可运行状态时,运行系统总是挑选一个优先级最高的线程执行,只有当线程停止.退出或者由于 ...

  7. JAVA之旅(十五)——多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止

    JAVA之旅(十五)--多线程的生产者和消费者,停止线程,守护线程,线程的优先级,setPriority设置优先级,yield临时停止 我们接着多线程讲 一.生产者和消费者 什么是生产者和消费者?我们 ...

  8. Linux-pthread如何设置线程的优先级

    设置线程优先级的函数: int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param ...

  9. 7.线程id,优先级讲解

    1.线程id可以通过Thread对象的getId()方法得到,在线程出了问题,为什么CPU占用这么高的时候,查的时候我们可以在堆栈信息中找到对应线程,然后干掉该线程就好! 2.而线程对象的getNam ...

随机推荐

  1. KSM概念学习

    KSM: Kernel SamePage Merging 内核同页合并 简介 KSM允许内核在两个或多个进程(包括虚拟客户机)之间共享完全相同的内存页. KSM让内核扫描检查正在运行中的程序,并比较他 ...

  2. 字符串拼接出现null的问题

    最近在开发的过程中遇到这样的问题,原因是在做一个需求的时候,要求将解密的号码和前缀进行拼接.一开始在这个拼接的过程中,没有考虑到数据校验的问题,因为有可能他的前缀或者其他需要拼接的字段在前端传递的过程 ...

  3. 前端传递数据到后台的两种方式;创建一个map或者创建一个FormData对象

    一.构建一个map getAllDeptAllUsers(){ const modleCode = {'auditMenuId': this.auditMenuId, 'enterpriseId': ...

  4. Bitter.NotifyOpenPaltform : HTTP 异步消息接收调度中心--开源贡献 之 一:简介

    现在互联网的系统越来越趋向于复杂,从单体系统到现在的微服务体系演变.公司与公司的分工也越来越明确. 大数据公司提供了大数据服务 人脸识别公司提供了人脸识别服务 OCR 公司提供了专业的OCR 服务 车 ...

  5. RabbitMQ(一)安装篇

    1. RabbitMQ 的介绍➢ 什么是 MQ?MQ 全称为 Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.➢ 要解决什么样的问题?在项目中,将一些无需即时返回且耗 ...

  6. 如何系统的了解Kafka

    1.概述 在大数据的浪潮下,时时刻刻都会产生大量的数据.比如社交媒体.博客.电子商务等等,这些数据会以不同的类型存储在不同的平台里面.为了执行ETL(提取.转换.加载)操作,需要一个消息中间件系统,该 ...

  7. POJ-1062(原始dijiksra算法+思维)

    昂贵的婚礼 POJ-1062 这道题目一开始看的时候难以理解,但是仔细想,还是可以和最短路联系的,我觉得类似于硬币交换等问题. 以下需要注意几个点,第一就是因为题目规定如何和超出了等级限制的人交易,则 ...

  8. docker nacos 集群部署

    1.准备机器3台 192.168.101.14 192.168.101.15 192.168.101.16 2.初始化sql(如果我们要搭建集群的话,那么肯定是不能用内嵌的数据库,不然数据无法共享.集 ...

  9. c++随机数问题研究

    1.问题背景 某项目中有个复杂的排序,先是各种规则依次排序,最后如果依然并列的话,那就随机位置,名次并列.测试中发现一个诡异现象,并列时随机排序但随机后2个case打印的顺序每次都一样,随机数没有起到 ...

  10. Learn Python the Hard Way,ex37-1

    本练习为复习python的符号和关键字 关键字有: #and or False True print(1==0 and 2==0, 1==0 or 2==0) print(False) print(T ...