06.yield
Thread.yield()方法的作用:暂停当前正在执行的线程,并执行其他线程。(可能没有效果) yield()让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得运行的机会。因此,使用yield()的目的是让具有相同优先级的线程之间能够适当的轮换执行。但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序再次选中。 结论:大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。
/**
* sleep 与 yield 方法的区别在于,当线程调用 sleep 方法时调用线程会被阻塞挂起指定的时间,
* 在这期间线程调度器不会去调度该线程。 而调用 yield 方法时,线程只是让出自己剩余的时间片,
* 并没有被阻塞挂起,而是处于就绪状态,线程调度器下一次调度时就有可能调度到当前线程执行
*/
public class YieldDemo implements Runnable{
YieldDemo(){
Thread t = new Thread(this);
t.start();
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
//当 i=O时让出CPU执行权,放弃时间片,进行下一轮调度
if (i%5==0){
System.out.println(Thread.currentThread()+" yield cpu...");
//当前线程让出CPU执行权,放弃时间片,进行下一轮调度
// Thread.yield();
}
}
System.out.println(Thread.currentThread()+" is over");
}
public static void main(String[] args){
new YieldDemo();
new YieldDemo();
new YieldDemo();
//执行多次输出结果样式
//Thread[Thread-0,5,main] yield cpu...
//Thread[Thread-1,5,main] yield cpu...
//Thread[Thread-2,5,main] yield cpu...
//Thread[Thread-0,5,main] is over
//Thread[Thread-1,5,main] is over
//Thread[Thread-2,5,main] is over
//输出了第一行后当前线程让出了 CPU 执行权
//注释Thread.yield();
//执行多次输出结果存在同一线程的两行输出在一起
//Thread[Thread-0,5,main] yield cpu...
//Thread[Thread-0,5,main] is over
//Thread[Thread-1,5,main] yield cpu...
//Thread[Thread-1,5,main] is over
//Thread[Thread-2,5,main] yield cpu...
//Thread[Thread-2,5,main] is over
}
}
06.yield的更多相关文章
- 在JavaScript中实现yield,实用简洁实现方式。
原题还是老赵的: http://blog.zhaojie.me/2010/06/code-for-fun-iterator-generator-yield-in-javascript.html 原以为 ...
- C#中的yield return用法演示源码
下边代码段是关于C#中的yield return用法演示的代码. using System;using System.Collections;using System.Collections.Gene ...
- [Laravel] 06 - Project: from Usercase to View
故事背景 一.项目预览 From: https://www.imooc.com/video/12518 二.知识点 通过项目复习之前的重难点,在此列出并解决. /* implement */ 项目开始 ...
- ACM会议列表与介绍(2014/05/06)
Conferences ACM SEACM Southeast Regional Conference ACM Southeast Regional Conference the oldest, co ...
- 深入理解yield(三):yield与基于Tornado的异步回调
转自:http://beginman.cn/python/2015/04/06/yield-via-Tornado/ 作者:BeginMan 版权声明:本文版权归作者所有,欢迎转载,但未经作者同意必须 ...
- Behind the scenes of the C# yield keyword(转)
https://startbigthinksmall.wordpress.com/2008/06/09/behind-the-scenes-of-the-c-yield-keyword/ Behind ...
- C#中yield return用法
转载:http://www.jb51.net/article/54810.htm http://www.cnblogs.com/HunterWei/archive/2012/06/13/csharpy ...
- 提高你的Python: 解释‘yield’和‘Generators(生成器)’
在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况.一些话题("if/else控制流" 或者 "定义和使用函数" ...
- 爬虫06 /scrapy框架
爬虫06 /scrapy框架 目录 爬虫06 /scrapy框架 1. scrapy概述/安装 2. 基本使用 1. 创建工程 2. 数据分析 3. 持久化存储 3. 全栈数据的爬取 4. 五大核心组 ...
随机推荐
- openlayers学习笔记(十三)— 异步调用JSON数据画点、文字标注与连线
使用Openlayers 3实现调用本地json数据在地图上添加点.文字标注以及连线. 生成底图地图 首先得有一个地图作为底图,代码如下: let vectorSource = new ol.sour ...
- 一次Linux服务器空间满的随笔解决记录
昨天突然无法上传文件到服务器上的,FTP工具总是到99%就卡住了.查了一下说可能是服务器满了. 赶紧用 df -h 命令查看空间使用情况.果然100%了. 想想上次查询才不到50%,怎么突然就满了了呢 ...
- Debian取消从光盘安装软件的方式(please insert the disc labeled)
与Ubuntu不同,使用apt-get install packages时Debian可能会提示: Media change: please insert the disc labeled 'Debi ...
- 数据挖掘:WAP-Tree与PLWAP-Tree
简介 我们首先应该从WAP-Tree说起,下面一段话摘自<Effective Web Log Mining using WAP Tree-Mine>原文 Abstract -World W ...
- Thinkphp5 使用爬虫框架 QueryList3 的非composer方法教程
首先,我要吐槽一下.我查了很多博客用tp框架使用composer方法结合 QueryList的教程.就是没有找到非composer的方法.于是摸索总结成功的经验: 工具:phpQuery.php 和 ...
- LOJ 2304 「NOI2017」泳池——思路+DP+常系数线性齐次递推
题目:https://loj.ac/problem/2304 看了各种题解…… \( dp[i][j] \) 表示有 i 列.第 j 行及以下默认合法,第 j+1 行至少有一个非法格子的概率,满足最大 ...
- Extjs的一些基础使用!
一.获取元素(Getting Elements) 1. Ext.get() var el = Ext.getCmp('id');//获取元素,等同于document.getElementById('i ...
- selenium2-java 浏览器cookie的获取
//成功登陆后增加如下代码 File cookieFile = new File("C:\\tmp\\tangdai.cookie.txt"); ...
- getAttribute 与getParmeter 区别
1.getAttribute是取得jsp中 用setAttribute設定的attribute 2.parameter得到的是string:attribute得到的是object 3.request. ...
- 记录MNIST采用卷积方式实现与理解
从时间上来说,这篇文章写的完了,因为这个实验早就做完了:但从能力上来说,这篇文章出现的早了,因为很多地方我都还没有理解.如果不现在写,不知道什么时候会有时间是其一,另外一个原因是怕自己过段时间忘记. ...