Java多线程之线程调度
线程优先级
Java线程有优先级,优先级高的线程会获得较多的运行机会(就像高富帅)。
Java线程的优先级用整数表示,取值范围是1~10,Thread类有以下三个静态常量:
- static int MAX_PRIORITY:线程可以具有的最高优先级,取值为10。
- static int MIN_PRIORITY: 线程可以具有的最低优先级,取值为1。
- static int NORM_PRIORITY:分配给线程的默认优先级,取值为5。
Thread类的setPriority()和getPriority()方法分别用来设置和获取线程的优先级。
线程优先级特点
- 每个线程都有默认的优先级。主线程的默认优先级为Thread.NORM_PRIORITY。
- 线程的优先级有继承关系,比如A线程中创建了B线程,那么B将和A具有相同的优先级。
- JVM提供了10个线程优先级,但与常见的操作系统都不能很好的映射。如果希望程序能移植到各个操作系统中,应该仅仅使用Thread类有以下三个静态常量作为优先级,这样能保证同样的优先级采用了同样的调度方式。
多线程常用方法
1. 线程睡眠:Thread.sleep(long millis)方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。sleep()平台移植性好。
2. 线程等待:Object类中的wait()方法,导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 唤醒方法。这个两个唤醒方法也是Object类中的方法,行为等价于调用 wait(0) 一样。
3. 线程让步:Thread.yield() 方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。
4. 线程加入:join()方法,等待其他线程终止。在当前线程中调用另一个线程的join()方法,则当前线程转入阻塞状态,直到另一个进程运行结束,当前线程再由阻塞转为就绪状态。
5. 线程唤醒:Object类中的notify()方法,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。 直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争;例如,唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。类似的方法还有一个notifyAll(),唤醒在此对象监视器上等待的所有线程。
6. 终止线程:stop(),不推荐使用,无论线程执行到哪里,它都会立刻停止掉线程。当线程写完id = 1,再准备写name = 11时被stop(),释放锁。读线程获得锁进行读操作,读到id = 1,name = 0,数据不一致。
重点是这种错误不会抛异常,将很难发现。
方法的区别
yield和sleep的区别
- sleep有时间,yield没有,所以调用yield后可能马上又会回到运行状态
- sleep会抛异常,yield不会
- 两者都不会释放锁,只有wait会释放锁
sleep和wait的区别
- sleep和wait都可以通过interrupt()打断暂停状态,抛InterruptException
- sleep没有释放锁,wait释放了锁
- wait只能在同步方法、同步块中使用,sleep可以在任何地方使用(因为wait和notify都需要获得和释放锁)
- Thread.sleep() Thread.yield()
- Object.wait() Object.notify()
为什么wait和notify都不在Thread类中
因为这些方法是对对象的锁进行操作,因为锁属于对象,不是说让线程停多久,而是直接拿走对象的锁,notify也是一样,把一个锁打开,让一个线程或所有线程知道。
notify和notifyAll的区别
- notify:所有人等吃饭,A收到吃饭消息,去窗口打饭,其他人都在等吃饭消息
- notifyAll:通知所有人吃饭消息,让他们排队打饭
常用到的方法如下:
sleep(): 强迫一个线程睡眠N毫秒。
isAlive(): 判断一个线程是否存活。
join(): 等待线程终止。
activeCount(): 程序中活跃的线程数。
enumerate(): 枚举程序中的线程。
currentThread(): 得到当前线程。
isDaemon(): 一个线程是否为守护线程。
setDaemon(): 设置一个线程为守护线程。(用户线程和守护线程的区别在于,是否等待主线程依赖于主线程结束而结束)
setName(): 为线程设置一个名称。
wait(): 强迫一个线程等待。
notify(): 通知一个线程继续运行。
setPriority(): 设置一个线程的优先级。
相关推荐
校园疫情防护知识培训
COMSOL模拟下的卡门涡街发电系统模型研究与应用,COMSOL卡门涡街发电模型:探究流体动力学与能源转换的融合机制,COMSOL卡门涡街发电模型 ,COMSOL; 卡门涡街; 发电模型; 核心关键词,COMSOL 下的卡门涡街发电模型研究
微控制器 (MCU) 是单个集成电路上的小型计算机,旨在控制电子系统内的特定任务。它将中央处理器 (CPU)、内存和输入/输出接口的功能全部集成在一个芯片上。 微控制器广泛用于嵌入式系统,例如家用电器、汽车系统、医疗设备和工业控制系统。它们还用于消费电子产品,例如游戏系统、数码相机和音频播放器。 典型的微控制器由处理器内核、易失性和非易失性存储器、输入/输出外设和各种通信接口组成。处理器内核负责执行指令和控制微控制器的其他组件。存储器用于存储数据和程序代码,而 input/output 外设用于与外部环境交互。 微控制器是可编程的,这意味着它们可以进行定制以执行特定任务。用于为微控制器编写代码的编程语言因制造商和微控制器类型而异。一些常用的编程语言包括 C、C++ 和汇编语言。 微控制器是可在嵌入式系统中使用的独立桌面。一些微控制器可能以 clock rate 速率运行并使用 4 位表达式。由于它们控制的许多设备都是电池供电的,因此微控制器通常必须是低功耗的。微控制器广泛应用于各种产品中,包括消费电子产品、汽车发动机、计算机外围设备以及测试和测量设备。这些也非常适合长期电池使用
Wincc高级报表工具:自定义模板,多格式输出与打印预览功能全解析,Wincc高级报表工具:自定义模板,多功能打印预览与导出,支持PDF打印及Excel表格导出,显示统计数据,兼容多种版本使用。,wincc高级报表,支持自定义模版,支持打印预览,支持打印PDF,支持导出Excel表格,支持自定义打印区域,可显示最大值,最小值,平均值,可求和。 可以在wincc7.4 7.5 8.0,博图wincc上使用。 ,wincc高级报表; 自定义模板; 打印预览; 打印PDF; 导出Excel; 自定义打印区域; 显示最大值/最小值/平均值; 求和; wincc7.4-8.0; 博图wincc。,Wincc高级报表:全功能自定义,打印、预览、PDF、Excel输出工具
电机控制算法中的死区补偿技术详解视频教程,电机控制算法之死区补偿策略深度解析视频教程,电机控制算法之死区补偿视频教程 ,电机控制; 死区补偿; 视频教程,电机控制算法死区补偿视频教程
使用 Python 学习数据科学教程
Qt CPPO优化的高效多能表格小部件——适用于工业级应用的强大Excel类程序,基于Qt CPP的高性能多功能表格小部件:工业级应用之首选,Qt CPP实现的高性能表格小部件。 是功能齐全的高性能表格小部件,适用于工业强度的应用程序。 它采用了模型视图控制器架构,因此多个表小部件可以显示相同的数据。 小部件具有广泛的打印功能,包括以与屏幕上的表格显示不同的视觉特征打印表格的功能。 一个功能强大高性能的类似excel表格程序。 支持合并单元格,查找替,打印预览,分页,字体加颜色,粗体,单元格边线,字体大小,撤销前进,背景颜色等功能。 源码: 使用Qt5.13.1_MinGW、Qt5.15.1_MinGW编译通过,其他版本请自行尝试。 ,核心关键词: Qt CPP; 高性能表格小部件; 工业强度应用; 模型视图控制器架构; 打印功能; Excel类似功能; 源码兼容Qt5.13.1_MinGW; Qt5.15.1_MinGW。,Qt C++高性能多功能表格控件
PFC2D云图绘制技术与实现:以鱼式数据导出为基础,运用MATLAB进行高精度图谱绘制,适应各种不规则模型与含空洞模型的绘图需求,利用PFC2D云图绘制技术:导出数据至Matlab绘图平台,实现不规则模型(含孔洞)可视化分析,pfc2d云图绘制。 使用fish将数据导出后,用matlab画图。 适用于各种不规则的模型,例如模型中存在孔洞。 ,pfc2d云图绘制; 数据导出; Matlab画图; 不规则模型; 孔洞处理,Matlab绘制PFC2D云图:不规则模型孔洞处理
山峰图,折线图,基本时序图,区域图,饼状图,环形图,圆弧进度条,多边形雷达图,仪表盘;适用uni-app,小程序端,android端,iOS端,鸿蒙app,前端,微信小程序,支付宝小程序,快手小程序,抖音小程序等
STM32 NUCLEOH753ZI FreeRTOS + UDP 基于 | CubeIDE |1.17.0 | | Firmware Package Name and Version |STM32Cube FW_H7 **V1.12.1** | |板子|NUCLEO-H753ZI| 查看配套教程:https://blog.csdn.net/Jobs_ZhaoCB/article/details/145631105?fromshare=blogdetail&sharetype=blogdetail&sharerId=145631105&sharerefer=PC&sharesource=Jobs_ZhaoCB&sharefrom=from_link
2024免费毕业设计成品,包括源码+数据库+往届论文资料,附带启动教程和安装包。 启动教程:https://www.bilibili.com/video/BV1jKDjYrEz1 技术栈:Vue.js+SpringBoot+MySQL。 开发工具:Idea+VSCode。
永磁同步电机多参数高精度辨识仿真研究:电阻、电感、磁链全面解析,永磁同步电机多参数高精度辨识仿真研究:电阻、电感、磁链全面解析,永磁同步电机多参数辨识仿真【电阻、电感、磁链】 [1]定子辨识原理:通过施加固定脉冲的占空比,测量电流及电压,计算定子电阻 [2]电感辨识原理:① 分别施加三组脉冲,测试获得线电感Lab、Lbc、Lca; ② 根据线电感以及角度,计算Ld及Lq; [3]磁链辨识原理:采用转速、电流双闭环控制,其中D轴给定固定电流,转速设定为额定转速50%左右 [hot] (1)定子电阻辨识:精度在0.1%左右 (2)DQ电感辨识:采用脉冲电压法,精度在0.02%左右 (3)转子磁链辨识:精度在0.12%左右; 2018b版本 ,定子电阻辨识;电感辨识;磁链辨识;脉冲电压法;精度,基于多参数的永磁同步电机辨识仿真:电阻、电感及磁链精确辨识方法
基于Comsol的工件感应加热仿真计算模型:多物理场耦合的电磁热分析与温度场分布研究,Comsol工件感应加热仿真模型:电磁热多物理场耦合计算揭秘温度场与电磁场分布,Comsol工件感应加热仿真计算模型,采用温度场和电磁场耦合电磁热多物理场进行计算,可以得到计算模型的温度场和电磁场分布 ,Comsol;感应加热;仿真计算模型;温度场;电磁场;耦合电磁热多物理场;温度场分布,Comsol仿真计算模型:多物理场耦合感应加热的温度与电磁场分布
永磁同步电机PMSM矢量控制仿真模型:负载波动下的稳定转速电流跟随与SVPWM实现原理详解,永磁同步电机PMSM矢量控制仿真模型:助力新人快速掌握转速与电流控制,理解SVPWM原理,带位置传感器仿真指导,参数计算精准便捷,永磁同步电机PMSM矢量控制仿真,该模型可以指导新人快速入门,了解各个控制环节的波形及搭建方法。 波形见附图,可见在负载波动情况下转速及电流跟随稳定; 模型可助于理解转速及电流环路设计; 模型可助于理解svpwm实现原理; 模型内提供参数计算方法,不用经验值整定; 带位置传感器矢量控制仿真; 可以简单; ,关键词:永磁同步电机; 矢量控制仿真; 波形; 负载波动; 转速; 电流环路设计; SVPWM实现原理; 参数计算方法; 位置传感器。,PMSM矢量控制仿真模型:轻松理解SVPWM与位置传感控制,快速入门之必备工具
团队合作培训课件
基于Simulink的永磁同步电机发电仿真控制模型及其双类型模型结构研究,基于永磁同步电机的发电仿真控制及其Simulink模型构建,永磁同步电机发电仿真控制simulink模型。 邮箱发送。 模型包括两种。 ,永磁同步电机; 发电仿真; 控制; Simulink模型; 邮箱发送; 模型多样性; 两种模型;,Simulink模型在永磁同步电机发电仿真控制中的应用研究
二手手机回收平台系统
本项目是自己做的设计,有GUI界面,完美运行,适合小白及有能力的同学进阶学习,大家可以下载使用,整体有非常高的借鉴价值,大家一起交流学习。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。
Buck-Boost双向DC-DC电源技术详解:基于STM32F334C8T6的自动切换稳压输出学习资料集,基于STM32F334C8T6芯片的Buck-Boost双向DC-DC电源全套学习资料:从原理到实战,涵盖AD原理图、程序源码、仿真模型与硬件设计报告,Buck-Boost双向DC-DC电源整套学习资料 功能:采用STM32F334C8T6芯片,能够根据输入电压和输出电压的大小关系,实现自动切工作模式,将参数信息进行显示,并且可以实现稳压输出。 程序+仿真+硬件软件说明报告+原理图+计算书等等 详细资料内容包括: (1)AD原理图:主电路原理图、辅助电源电路、信号调理与滤波电路、控制器电路等 (2)程序源码:三套程序(Buck模式、Boost模式、Buck-Boost模式),具有软起动、完整的短路保护,过流保护,输出过压保护,输入过压欠压等保护功能 (3)仿真模型:使用PSIM搭建,包括开环和闭环程序,PI控制参数可以参考数字环路设计计算书。 (4)Word硬件设计报告:包括电路参数设计、器件选型、原理分析等等 (5)代码计算书:电压电流采样计算、短路保护计算等等 (6)Word
基于STM32F405的HFI高频方波注入与无感FOC控制方案:永磁同步电机零速带载启动与全速域运行技术,STM32F405实现的无感FOC控制及HFI高频方波注入方案:零速启动、永磁同步电机控制,全速域运行,代码全C语言,含详细开发资源,HFI高频方波注入方案stm32f405 无感FOC控制 直接闭环启动 永磁同步电机无感控制,0速带载启动,堵转保持扭矩 低速HFI, 高速SMO,全速域运行。 基于stm32f405。 高频注入零速启动三步走: 1 .先是高频注入,角度估算收敛。 2.脉冲NS磁极辨识。 3 .角度,速度双闭坏零速启动运行。 包括完整的cubemx配置文件,mdk工程,原理图和开发笔记,初始角度检测仿真,代码全C语言,宏定义选项均有中文注释,方便我植到自己的项目中。 内涵升级版hfi程序和新的foc程序框架,新版hfi程序速度波动更小。 ,关键词: HFI高频方波注入; stm32f405; 无感FOC控制; 直接闭环启动; 永磁同步电机无感控制; 零速启动三步走; 脉冲NS磁极辨识; 速度波