java 线程什么时候结束_java线程什么时候让出cpu?

Thread.sleep();

sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过后,cpu才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep方法并不会释放锁,即使当前线程使用sleep方法让出了cpu,但其他被同步锁挡住了的线程也无法得到执行。

在多线程争用的情况,拥有锁的线程进行一些耗时操作,会极大降低吞吐量(amdahl定律),如果在同步块中使用sleep就是一种糟糕的做法,它不会释放锁却阻止其他线程获得锁。

2. Thread.yield();

yeild是个native静态方法,这个方法是想把自己占有的cpu时间释放掉,然后和其他线程一起竞争(注意yeild的线程还是有可能争夺到cpu,注意与sleep区别)。在javadoc中也说明了,yeild是个基本不会用到的方法,一般在debug和test中使用。

3. Object.wait();

wait会把当前的锁释放掉同时阻塞住,让出CPU;当别的线程调用该 Object 的 notify/notifyAll 之后,有可能得到 CPU,同时重新获得锁。

当然同样的condition.await();

也会释放锁并且让出CPU;

当然很多竞争锁失败的线程最终也会阻塞住,但是这不是主动让出CPU,不在讨论范围内。

4. Thread.stop();

太过暴力,不推荐使用,同时会释放所有锁。容易导致数据不一致,具体请查看[高并发Java 二] 多线程基础

5. Thread.currentThread().suspend();

挂起线程,suspend不会释放锁,suspend容易发生死锁,不推荐使用。原因请查看[高并发Java 二] 多线程基础

6. LockSupport.park();

与suspend一样挂起线程,但是park/unpark不会发生死锁,原因请查看[高并发Java 五] JDK并发包1

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

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

相关文章

Hibernate配置方式

Hibernate配置方式 Hibernate给人的感受是灵活的&#xff0c;要达到同一个目的&#xff0c;我们可以使用几种不同的办法。就拿Hibernate配置来说&#xff0c;常用的有如下三种方式&#xff0c;任选其一。 在 hibernate.cfg.xml 中加入元素 <property>、<mapping>&a…

js中 javascript:void(0) 用法详解

javascript:void(0)表示不做任何动作。如&#xff1a; 复制代码代码如下:<a href"javascript:void(0);" οnclick"alert(ok);"></a> 这里表示这个链接不做跳转动作&#xff0c;执行onClick事件。 我想使用过ajax的都常见这样的代码&#xff1…

带有ActiveMQ的JMS

带有ActiveMQ的JMS JMS是Java Message Service的缩写&#xff0c;它提供了一种以松散耦合&#xff0c;灵活的方式集成应用程序的机制。 JMS以存储和转发的方式跨应用程序异步传递数据。 应用程序通过充当中介的MOM&#xff08;面向消息的中间件&#xff09;进行通信&#xff0c…

矩阵分解 java_使用矩阵分解为推荐系统

矩阵分解假设“潜在因素”&#xff0c;例如对用户的意大利食物的偏好和项目食物的意外性与矩阵中的评级有关 .因此&#xff0c;整个问题类型转变为矩阵重构问题&#xff0c;存在许多不同的解决方案 . 一个简单的&#xff0c;可能很慢的解决方案是(除了ALS和其他一些矩阵重建的可…

用户故事排球教练助手

计划&#xff1a;估计这个任务需要一周时间 需求分析&#xff1a;作为一名排球教练助手&#xff0c;我需要了解每场每位队员的技术动作&#xff0c;每场比赛每位队员的得分情况&#xff0c;以便教练更好的了解到每位队员的发挥情况和特长。 设计文档&#xff1a;用户进入此界面…

TMS320DM642学习----第一篇(硬件连接)

DSP设备型号&#xff1a;SEED-DTK-VPM642&#xff08;目前实验室用途&#xff1a;视频处理&#xff0c;图像处理方向&#xff0c;预计搭载目标跟踪以及云台防抖等算法&#xff09; 官网链接&#xff1a;http://www.seeddsp.com/index.php/Home/Product/detail/name/1/id/174.ht…

字符串内存内部

本文基于我对StackOverflow的回答 。 我正在尝试解释String类如何存储文本&#xff0c;内部存储和常量池如何工作。 这里要理解的要点是String Java对象与其内容– private value字段下的char[]之间的区别。 String基本上是char[]数组的包装器&#xff0c;将其封装并使其无法修…

关于inline-block 元素之间为何会产生间隔

关于inline-block 元素之间为何会产生间隔 现象&#xff1a; <body><input type"text"><input type"text"> </body> 在浏览器中的表现&#xff1a; 实时上不仅仅是 inline-block 会导致这种现象。 inline 也会导致。 那问题来了&a…

java 入参 是 枚举_java 枚举 参数传递

展开全部这样做是不行的&#xff0c;原因是&#xff1a;Java中的对象实例化都是在堆中&#xff0c;如果是普通的类实例变量&#xff0c;比如在方法636f707962616964757a686964616f313333376166371中定义的普通类实例变量&#xff0c;传到了方法2中&#xff0c;由于方法1和方法2…

loadView的使用总结

一、loadView 1. loadView什么时候被调用&#xff1f; 每次访问UIViewController的view&#xff08;如 controller.view、self.view&#xff09;并且view为nil&#xff0c;loadView方法就会被调用 2. 有什么作用 loadView 方法是用来负责创建UIViewController的view 3. 默认实…

数据库备份 java jar_Java实现数据库备份并利用ant导入SQL脚本

​数据备份对于经常在运维部署方面的工作者来说&#xff0c;是一件相对简单的事情&#xff0c;都可以通过某一个SQL工具进行备份&#xff0c;但是如果在项目运行当中&#xff0c;我们需要对数据进行实时&#xff0c;或者是每隔一星期&#xff0c;一个月&#xff0c;等等进行数据…

JSF简单Ajax示例

今天&#xff0c;我们将看到一些使用JSF的Ajax简单样本。 如果要查看有关JSF / Web应用程序的其他文章&#xff0c;请单击以下链接&#xff1a; 重定向后的JSF持久化对象和消息 &#xff0c; 使用JAAS和JSF进行用户登录验证 &#xff0c; JSF&#xff1a;Converter and Bean Au…

常用的好用的window工具

1. FastStone Capture截图录屏软件 百度软件中心&#xff1a;http://rj.baidu.com/soft/detail/13504.html?ald 注册企业版&#xff1a; 用户名&#xff1a;c1ikm 注册码&#xff1a;AXMQX-RMMMJ-DBHHF-WIHTV 中文输入乱码解决方法&#xff1a; 2. Notepad文本编辑器&#xff…

表分区

http://www.cnblogs.com/leestar54/p/6225821.html转载于:https://www.cnblogs.com/jouny/p/6262850.html

java飞鸽传书_feige 飞鸽传书源代码java 实现不错的联系网络编程的资料飞鸽传书的GUI(java实现) - 下载 - 搜珍网...

我的飞鸽传书/FileFilter.java我的飞鸽传书/FileNameExtensionFilter.java我的飞鸽传书/飞鸽传书/classes/feige/About.class我的飞鸽传书/飞鸽传书/classes/feige/ConnectOthers$ReadMessageThread.class我的飞鸽传书/飞鸽传书/classes/feige/ConnectOthers.class我的飞鸽传书…

JAXB和根元素

XmlRootElement是人们习惯于与JAXB&#xff08;JSR-222&#xff09;一起使用的注释。 目的是将根元素与类唯一关联。 由于JAXB类映射到复杂类型&#xff0c;因此一个类有可能对应于多个根元素。 在这种情况下&#xff0c;无法使用XmlRootElement &#xff0c;人们开始感到有些困…

python socket模块实现udp通信_Python基于socket模块实现UDP通信功能示例

Python基于socket模块实现UDP通信功能示例本文实例讲述了Python基于socket模块实现UDP通信功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;一 代码1、接收端import socket#使用IPV4协议&#xff0c;使用UDP协议传输数据ssocket.socket(socket.AF_INET, socket.SOC…

Hibernate缓存基础知识

最近&#xff0c;我尝试了休眠缓存。 在这篇文章中&#xff0c;我想分享我的经验&#xff0c;并指出Hibernate Second Level Cache的一些细节。 在此过程中&#xff0c;我将指导您阅读一些有助于实现缓存的文章。 让我们从地面开始。 在休眠状态下缓存 缓存功能旨在减少必要的…

TP3.2之WHERE组合条件处理

1、条件都是int类型&#xff1a; $User->where(type1 AND status1)->select(); 2、条件包含字符串类型&#xff1a; 使用3.1以上版本的话&#xff0c;使用字符串条件的时候&#xff0c;建议配合预处理机制&#xff0c;确保更加安全&#xff0c; $Model->where("i…