前言:

前几天复习了一下多线程,发现有许多网上讲的都很抽象,所以,自己把网上的一些案例总结了一下!

一. Thread.yield( )方法:

使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。

Java线程中有一个Thread.yield( )方法,很多人翻译成线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行。

打个比方:现在有很多人在排队上厕所,好不容易轮到这个人上厕所了,突然这个人说:“我要和大家来个竞赛,看谁先抢到厕所!”,然后所有的人在同一起跑线冲向厕所,有可能是别人抢到了,也有可能他自己有抢到了。我们还知道线程有个优先级的问题,那么手里有优先权的这些人就一定能抢到厕所的位置吗? 不一定的,他们只是概率上大些,也有可能没特权的抢到了。

例子:

package com.yield;public class YieldTest extends Thread {public YieldTest(String name) {super(name);}@Overridepublic void run() {for (int i = 1; i <= 50; i++) {System.out.println("" + this.getName() + "-----" + i);// 当i为30时,该线程就会把CPU时间让掉,让其他或者自己的线程执行(也就是谁先抢到谁执行)if (i == 30) {this.yield();}}}public static void main(String[] args) {YieldTest yt1 = new YieldTest("张三");YieldTest yt2 = new YieldTest("李四");yt1.start();yt2.start();}
}

运行结果:

第一种情况:李四(线程)当执行到30时会CPU时间让掉,这时张三(线程)抢到CPU时间并执行。

第二种情况:李四(线程)当执行到30时会CPU时间让掉,这时李四(线程)抢到CPU时间并执行。

[另附Efficient Java ~第二版相关截图-第72条:不要依赖于线程调度器]

————————————————
版权声明:本文为CSDN博主「dabing69221」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dabing69221/article/details/17426953

Java Thread.yield详解相关推荐

  1. Thread.yield()详解

    (1)首先介绍线程运行状态转换,如下图: 新建状态(New):新创建了一个线程对象. 就绪状态(可执行状态,Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位 ...

  2. Java Thread.join()详解

     一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二.为什么要用joi ...

  3. Java并发编程之Thread类详解

    Thread类详解: 线程(Thread): 是操作系统进行调度的最小单位,Java中的线程是对操作系统线程的封装.本文从线程的创建到停止结合代码和具体实例分析一下关于java线程的一些常见问题. 线 ...

  4. 4.6 W 字总结!Java 11—Java 17特性详解

    作者 | 民工哥技术之路 来源 | https://mp.weixin.qq.com/s/SVleHYFQeePNT7q67UoL4Q Java 11 特性详解 基于嵌套的访问控制 与 Java 语言 ...

  5. 【狂神说Java】多线程详解

    [狂神说Java]多线程详解 1.任务 生活中的例子.边吃饭.边玩手机 开车.打电话.挂点滴 上厕所.玩手机 现实中太多这样同时做多件事情的例子了,看起来是多个任务都在做,其实本质上我们的大脑在同一时 ...

  6. Java内存溢出详解之Tomcat配置

    Java内存溢出详解 转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError ...

  7. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  8. Java线程池详解学习:ThreadPoolExecutor

    Java线程池详解学习:ThreadPoolExecutor Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) - zhangpeterx的博客 在源码的目录java/util/ ...

  9. Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...

    Java常用的线程池有FixedThreadPool和CachedThreadPool,我们可以通过查看他们的源码来进行学习. Java的源码下载参考这篇文章:Java源码下载和阅读(JDK1.8) ...

  10. Java内存溢出详解

    Java内存溢出详解 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在 ...

最新文章

  1. 优胜教育暴雷之后,线下一对一还是门好生意吗?
  2. ionic4 ngFor中使用ngIf
  3. python如何访问对象的属性_Python:从存储在字典中的对象访问对象属性
  4. format函数使用matlab,Matlab基本函数-format函数 | 学步园
  5. 解析LIFO(FILO)结构栈(C语言版)
  6. 字节跳动后端开发实习生面试经验
  7. springboot Nexus Repository Maven仓库搭建及使用
  8. JGG论坛:赵方庆研究员解析肠道菌群与人体健康(11月10日10:00)
  9. linux版英特尔酷睿i7,英特尔酷睿i7 1165G7和AMD Ryzen 7 Pro 4750U Linux性能对比
  10. 《小白兔到大黑牛》第十四篇Hadoop中五个进程作用
  11. Ubuntu18.04通过apt安装libssl1.1因依赖问题导致失败的解决办法
  12. 理想服务员 --励志动漫
  13. 超声波测距仪编程_超声波测距仪程序
  14. 如何实现云时代的高效运维?
  15. python 数据分析 14天_python数据分析简介
  16. C++20中的协程(Coroutine)
  17. FileUriExposedException: file:///storage/emulated/0/Android/data/com.skyrin.bingo/cache/app/app.apk
  18. Audition Au制作左右双声道以及导出
  19. C++之小学奥数(1)
  20. 安装labelimg及出现的问题

热门文章

  1. iTextSharp 生成pdf Form 实例
  2. ORACLE10g中 ora-12638:身份证明检索失败(
  3. 静态代码块与构造函数的作用
  4. 一个简单的Web服务器
  5. [20170516]nvl与非NULL约束.txt
  6. BRVAH分组功能原理分析
  7. mysql-日常命令使用汇总
  8. 如何利用路由器防止DoS拒绝服务疯狂***
  9. 这样去分析大盘才能稳赚不亏best
  10. 10.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 内置插件