关于java中线程yield()方法问题

关于java中线程yield()方法问题
问题一:
我知道yield是用来休眠当前线程,但我查看了资料,又说其不会释放锁,所以我就不解了,其明明会将cpu资源给其他线程,那它不释放锁,其他线程有怎么获取cpu资源呢?还是我理解有误?
问题二:
资料说是相同优先级的线程可以竞争获取资源?那么比它优先级高的有机会吗?

yield() 方法和释放不释放锁没有关系,楼主对其作用理解有偏差。jdk 中的解释为:调用该方法的线程通知线程调度器当前线程可以让出CPU,线程调度器可以响应或者忽略此请求。要注意的是:线程调度器并不一定响应这个请求。响应请求时,仅仅将当前线程变为可运行状态。其他处于可运行状态的线程将竞争CPU资源,高优先级线程将会比相同优先级的线程有较高的概率获得CPU资源,但并不保证。另外,需要注意的是,CPU资源和锁的获取并没有直接关系,CPU资源是由系统来分配的。

不要混淆cpu和锁,线程交出cpu并不等于一定要交出锁,这个yield只是让出cpu,让其他线程可以使用cpu,但是如果其他线程wait在该线程hold住的锁上的话,那些线程是不会被执行的,其实就是即使运行也还是继续wait。所有就绪的线程都可以竞争,高优先级的只是概率大些,但未必一定会先执行。而且刚刚用yield让出cpu的线程也有可能被再次调度到。

yield不会释放锁,是指不会释放它锁住的一些“动作”,但是让出了cpu资源;执行yield()的线程有可能在进入到可执行状态后马上又被执行,所以优先级低的线程不能竞争获取资源,相同优先级的线程可以竞争获取资源,高优先级线程将会比相同优先级的线程有较高的概率获得CPU资源。

问题1:其他线程包括竞争这个“锁”的线程,也包括跟这个“锁”毫无关系的线程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lisp尺寸标注增加前后缀_求一CAD标注加前缀与后缀lisp

回答:1.计算所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度)(defun c:LL ()(setvar "cmdecho" 1)(setq en (ssget(list (0 . "spline,arc,line,ellipse,LWPOLYLINE"))))(setq i 0)(setq ll 0)(repeat (sslength en)(setq ss (…

beetl 页面标签_05.Beetl标签函数以及定界符、占位符介绍---《Beetl视频课程》

标签函数 layout所谓标签函数,即允许处理模板文件里的一块内容,功能等于同jsp tag。如Beetl内置的layout标签index.htmllayout("/inc/layout.html",{title:主题}){%>Hello,this is main partlayout.htmltitle is ${title}body content ${la…

hql实例 jpa_SpringBoot学习笔记九:Spring Data Jpa的使用

Spring Data Jpa 简介JPAJPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR 338,这些接口所在包为javax.persistence,详细内容可参考https://github.com/javaee/jpa-spec)JPA的出现主要是为了简化持久…

Objects.requireNonNull 方法说明

在写代码的时候,Idea经常会提醒我们可以使用这个方法来进行参数非空检查, 这个方法的源码也非常简单, 如下所示: /*** Checks that the specified object reference is not {code null}. This* method is designed primarily for doing parameter validation in methods* and …

Java service层获取HttpServletRequest工具类的方法

大家都知道 能在Controller/action层获取HttpServletRequest ,但是这里给大家备份的是从代码内部service层获取HttpServletRequest工具类。 具体如下: package com.base.common.sessionutils; import javax.servlet.http.HttpServletRequest; import j…

正则表达式发明者_浅谈正则表达式背后的基本原理

一、写在前面搞编程的都知道正则表达式是什么东西,这里就不多啰嗦了,需要强调的是,这篇文章并不是教你怎么去使用用正则表达式,正则表达式的语法并不是本文的重点,这篇文章的目的就是剥开正则表达式的语法糖&#xff0…

Java8 - 使用 Comparator.comparing 进行排序

使用外部比较器Comparator进行排序 当我们需要对集合的元素进行排序的时候,可以使用java.util.Comparator 创建一个比较器来进行排序。Comparator接口同样也是一个函数式接口,我们可以把使用lambda表达式。如下示例, package com.common;im…

cairo填充_Cairo 图形指南 (5) —— 形状与填充

这一部分,讲述一些基本的以及较为高级的形状绘制及其纯色 (solid color)、图案 (pattern) 与渐变 (gradient) 填充方法。基本形状Cairo 提供了几个用于绘制基本形状的函数。#include#include#includestatic gbooleanon_expose_event (GtkWidget * widget,GdkEventEx…

java集合进行排序的两种方式

java集合的工具类Collections中提供了两种排序的方法,分别是: Collections.sort(List list)Collections.sort(List list,Comparator c) 第一种称为自然排序,参与排序的对象需实现comparable接口,重写其compareTo()方法,方法体中实现对象的比较大小规则,示例如下: 实体类:(基本…

ubuntu编写python脚本_python在ubuntu中的几种方法(小结)

通过ubuntu官方的apt工具包安装通过PPA(Personal Package Archive) 的apt工具包安装通过编译python源代码安装通过ubuntu官方的apt工具包安装安装完成后, 可以用下面的命令进行确认从PPA(Personal Package Archives) 安装apt工具包类似使用apt工具包安装python的工…

Java中String类中compareTo( )方法

compareTo方法是比较简单的,我们可以直接看其源码: 源码如下: public int compareTo(String anotherString) {int len1 value.length;int len2 anotherString.value.length;int lim Math.min(len1, len2);char v1[] value;char v2[] anotherString…

python elif可以单独使用_Python的elif语句怎么用

else和elif语句也可以叫做子句,因为它们不能独立使用,两者都是出现在if、for、while语句内部的。else子句可以增加一种选择;而elif子句则是需要检查更多条件时会被使用,与if和else一同使用,elif是else if 的简写。if和…

SpringMVC接收哪些类型参数参数

支持的数据类型: 基本类型参数: 包括基本类型和 String 类型 POJO 类型参数: 包括实体类,以及关联的实体类 数组和集合类型参数: 包括 List 结构和 Map 结构的集合(包括数组) SpringMVC …

禁用当前的账户win7_系统小技巧:服务客人 开启Windows 10来宾账户

出于安全考虑,Windows 10默认以管理员账户登录,没有开启来宾账户。但对于那些只需在电脑上浏览网页或收看电子邮件的用户,给他们开启来宾账户非常必要。来宾权限或账户的开启,可以通过下面的两种方法。1. 通过系统设置 开启来宾权…

Java之接口的静态方法的定义和使用

格式如下:(就是将abstract或者default换成ststic即可,带上方法体) public static 返回值类型 方法名称(参数列表){方法体----}代码如下: //定义一个接口 public interface MyInterfaceStatic …

三阶魔方还原步骤图_三阶魔方公式图解、教程

三阶魔方公式、魔方图解、魔方教程,从零基础到精通!魔方还原法 Rubics Cube Solution ————先看理论“魔方的还原方法很多精彩内容,尽在百度攻略:https://gl.baidu.com在这里向大家介绍一种比较简单的魔方六面还原方法。这种方…

通俗易懂告诉你CPU/GPU是什么?

通俗易懂告诉你CPU/GPU是什么? CPU CPU( Central Processing Unit, 中央处理器)就是机器的“大脑”,也是布局谋略、发号施令、控制行动的“总司令官”。 CPU的结构主要包括运算器(ALU, Arithmetic and Logic Unit)、控制单元&a…

mysql正在加载_mysql 数据库基本操作

CREATE TABLE classes(id INT PRIMARY KEY AUTO_INCREMENT COMMENT班级表id,name VARCHAR(20) COMMENT班级名称);运行DESCRIBE classes;--------------------------------------------------------| Field | Type | Null | Key | Default | Extra |---------------------------…

CPU和GPU的区别是什么?

CPU是一种微处理器,用于执行程序根据操作(如算术、逻辑、控制和输入-输出)给出的指令。相反,GPU最初设计用于在电脑游戏中渲染图像。CPU强调低延迟,而GPU则强调高吞吐量。 CPU Vs GPU 内容 比较表格定义区别关键不同结论 1. 比较表格 从上…

乌班图配置mysql Java_Ubuntu准备+MySQL+Java

Linux服务器准备1 . 安装Ubuntu系统2 . 修改root用户密码sudo passwd root #修改root账户密码logout # 退出当前账号并重新登录#如果需要关机使用 halt 命令3 . 更新所有Linux的开发包apt-get update4 . 配置相关的编译包apt-get install gcc libpcre3 libpcrecpp* libpcre3-de…