Java 多线程 yield方法
yield()方法
理论上,yield意味着放手,放弃,投降。一个调用yield()方法的线程告诉虚拟机它乐意让其他线程占用自己的位置。这表明该线程没有在做一些紧急的事情。注意,这仅是一个暗示,并不能保证不会产生任何影响。
在Thread.java中yield()定义如下:
1
2
3
4
5
6
7
|
/**
* A hint to the scheduler that the current thread is willing to yield its current use of a processor. The scheduler is free to ignore
* this hint. Yield is a heuristic attempt to improve relative progression between threads that would otherwise over-utilize a CPU.
* Its use should be combined with detailed profiling and benchmarking to ensure that it actually has the desired effect.
*/
public static native void yield();
|
让我们列举一下关于以上定义重要的几点:
- Yield是一个静态的原生(native)方法
- Yield告诉当前正在执行的线程把运行机会交给线程池中拥有相同优先级的线程。
- Yield不能保证使得当前正在运行的线程迅速转换到可运行的状态
- 它仅能使一个线程从运行状态转到可运行状态,而不是等待或阻塞状态
package java_thread.learn01.c002;
public class yieldTest extends Thread{
@Override
public void run(){
long btime = System.currentTimeMillis();
int count = 0;
for(int i = 0;i<50000000;i++){
Thread.yield();
count = count + (i + 1);
}
long etime = System.currentTimeMillis();
System.out.println("用时:" +(etime -btime) + "毫秒");
}
}
package java_thread.learn01.c002;
public class yieldRun {
public static void main(String[] args) {
yieldTest yt = new yieldTest();
yt.start();
}
}
上面代码,如果注释Thread.yield();,则时间20毫秒左右,如果不注释,则5030毫秒左右,自己测试看看。
Java 多线程 yield方法相关推荐
- Java——多线程之方法详解
Java多线程系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多 ...
- java多线程中方法_java中多线程 - 多线程中的基本方法
介绍一下线程中基本的方法使用 线程睡眠sleep() Thread.sleep(毫秒);我们可以通过sleep方法设置让线程睡眠.可以看到sleep是个静态方法 public static nativ ...
- Java多线程优化方法及使用方式
一.多线程介绍 在编程中,我们不可逃避的会遇到多线程的编程问题,因为在大多数的业务系统中需要并发处理,如果是在并发的场景中,多线程就非常重要了.另外,我们在面试的时候,面试官通常也会问到我们关于多线程 ...
- java多线程实现方法
2019独角兽企业重金招聘Python工程师标准>>> 编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互.一般有三种方法,Thread,Runnable,Calla ...
- java 多线程wait()方法的基本使用——63
wait()方法的作用 wait()方法的作用是使当前线程暂停运行,并释放锁. 创建测试用的Java项目 类Test1.java代码 package chapter3.test3_1.test3_1_ ...
- java多线程 isAlive方法的有趣现象
多线程中的isAlive方法相信大家都知道.无非就是当前线程如果是存活的,在运行中,则返回true,否则返回false,不过还是有些有趣现象的,我们这里用代码演示一下: class TestThrea ...
- java多线程run方法传参
我们知道多线程是通过star()方法让线程处于准备就绪状态,而实际运行的业务逻辑是放在run()方法体中的,但是run()方法是没有参数的方法,实际的业务场景中,我们可能需要向方法体中传递参数,下面介 ...
- java多线程通信方法
http://my.oschina.net/u/248570/blog/53226 转载于:https://www.cnblogs.com/svennee/p/4081153.html
- java中断响应时间_Java多线程 sleep方法响应中断 sleep面试问题(与wait/notify的
Java多线程 sleep方法响应中断 sleep面试问题(与wait/notify的 Java多线程 sleep方法响应中断 & sleep面试问题(与wait/notify的比较) 文章目 ...
最新文章
- C#生成唯一的字符串或者数字
- centos6.5环境 安装php5.5.30的redis扩展 介绍
- 【Win 10应用开发】SplitView控件
- 《卓有成效的程序员》读书笔记
- 零基础学Python:使用type、metaclass动态创建方法和属性的详细用法
- 数据库工具phpstudy
- STC单片机程序下载失败总结
- WPF 使用FontAwesome字体图标
- linux多线程_Java+Linux,深入内核源码讲解多线程之进程
- JAVA中protected的作用
- SpringCloud工作笔记046---SpringCloud https证书申请_不同证书区别
- Nginx 是如何让你的缓存延期的
- 辽工大计算机网络实验报告,辽工大计算机硬件实验报告.doc
- Spring的ID增长器使用示例(MySql数据库)
- atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结
- AD17入门简单教程(一)
- 高中计算机数据的基本特征,高一信息技术《信息与信息的基本特征》教案
- Adobe Photoshop CC2020【PS cc2020】安装方式及安装包下载
- 计算机组成原理课程设计基于cop2000
- 微信发布小游戏扶持政策;滴滴上线“滴水贷”;美团将与百度合作无人驾驶送外卖丨价值早报...
热门文章
- 43行代码AC——例题6-8 树(Tree,UVa 548)——解题报告
- vue 安装php,vue中使用openinstall
- 映射文件_Hibernate 映射文件
- 简单几步就教会你如何使用 dockerfile 制作 LNMP 镜像,还不赶紧学起来
- 传递参数命令——xargs
- php prs4,pr关键帧有什么用
- python可视化拖拽平台_【技术解码】不用控制器,只拖拽模型面就可以做动画!很好玩的动画工具...
- java运用网络编程技术代码_Java 网络编程
- 效率 每秒_每秒看懂超过5.3亿张图片!异构计算是如何发挥AI效率的?
- oracle语句借书,Oracle SQL题目及其解答(借书卡、图书、借书记录)