1.背景

面试中经常会被问到:

sleep 与 yield 区别

2.代码

直接看代码吧!

package com.ldp.demo01;

import com.common.MyThreadUtil;
import lombok.extern.slf4j.Slf4j; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 01/16 9:17
* @description <P>
* sleep 与 yield 区别
* sleep
* 1. 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)
* 2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException
* 3. 睡眠结束后的线程未必会立刻得到执行
* yield
* 1. 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程
* 2. 具体的实现依赖于操作系统的任务调度器
* </P>
*/
@Slf4j
public class Test02 {
/**
* sleep
*
* @param args
*/
public static void main01(String[] args) {
Thread t1 = new Thread(() -> {
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}, "t1");
t1.start(); MyThreadUtil.sleep(1);
// 打断正在睡眠的线程,其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException
t1.interrupt();
} /**
* yield
* <p>
* 测试结果
* 由于t2中执行了Thread.currentThread().yield(),t2中循环的数要少很多
*
* @param args
*/
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
int n = 0;
while (true) {
n++;
log.debug("running....{}", n);
}
}, "t1"); Thread t2 = new Thread(() -> {
int n = 0;
while (true) {
n++;
// 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程
// 通过有无让出cup观察n的变化快慢
Thread.currentThread().yield();
log.debug(" running....{}", n);
}
}, "t2");
MyThreadUtil.sleep(1);
t1.start();
t2.start();
}
}

完美

java多线程之sleep 与 yield 区别的更多相关文章

  1. java多线程之yield,join,wait,sleep的区别

    Java多线程之yield,join,wait,sleep的区别 Java多线程中,经常会遇到yield,join,wait和sleep方法.容易混淆他们的功能及作用.自己仔细研究了下,他们主要的区别 ...

  2. JAVA多线程之wait/notify

    本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...

  3. Java多线程之Runnable与Thread

    Java多线程之Thread与Runnable 一.Thread VS Runnable 在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类和 ...

  4. Java多线程之ConcurrentSkipListMap深入分析(转)

    Java多线程之ConcurrentSkipListMap深入分析   一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下, ...

  5. JAVA多线程之volatile 与 synchronized 的比较

    一,volatile关键字的可见性 要想理解volatile关键字,得先了解下JAVA的内存模型,Java内存模型的抽象示意图如下: 从图中可以看出: ①每个线程都有一个自己的本地内存空间--线程栈空 ...

  6. JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止

    JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止 背景 当单线程的程序发生一个未捕获的异常时我们可以采用try....catch进行异常的捕获,但是在多线程环境 ...

  7. java多线程之wait和notify协作,生产者和消费者

    这篇直接贴代码了 package cn.javaBase.study_thread1; class Source { public static int num = 0; //假设这是馒头的数量 } ...

  8. Java——多线程之Lock锁

    Java多线系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多线 ...

  9. java 多线程之wait(),notify,notifyAll(),yield()

    wait(),notify(),notifyAll()不属于Thread类,而是属于Object基础类,也就是说每个对像都有wait(),notify(),notifyAll()的功能.因为都个对像都 ...

  10. JAVA多线程之CountDownLatch与join的区别

    首先,我们来看一个应用场景1: 假设一条流水线上有三个工作者:worker0,worker1,worker2.有一个任务的完成需要他们三者协作完成,worker2可以开始这个任务的前提是worker0 ...

随机推荐

  1. MoneyPrinterPlus:AI自动短视频生成工具-阿里云配置详解

    MoneyPrinterPlus是一个很好的自动短视频生成工具,虽然是一个非常好的工具,但是有些小伙伴可能不太清楚具体应该如何配置才能让它跑起来. 因为MoneyPrinterPlus依赖一些具体的配 ...

  2. java多线程-3-使用多线程的时机

    许多人对于计算机的运行原理不了解,甚至根本不了解. 不幸的是,此类中的一部分人也参与了计算机的编码工作.可想而知,编写的效率和结果.听者伤心,闻者流泪. 此类同学的常见的误解: 并发就能加快任务完成 ...

  3. 降维(三)LLE与其他降维技术

    LLE 局部线性嵌入,Locally Linear Embedding(LLE)是另一个功能强大的非线性降维(nonlinear dimensional reduction,NLDR)技术.它是一个流 ...

  4. HTTP 协议学习:1-HTTP概述

    背景 原文:HTTP概述 HTTP是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议).它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说, ...

  5. 模拟用户登录-cookes

    import requests url = 'https://www.xread8.com/user/login.json' headers = { 'User-Agent': 'Mozilla/5. ...

  6. PHP接入苹果支付

    Ios苹果支付流程: 客户端先从苹果获取内购Id. 客户端将内购id,金额.用户id等传给服务端获取一个自己服务端生成的订单号. 客户端向苹果发起支付. 支付成功后,客户端从本地拿支付凭证.将支付凭证 ...

  7. 【electron-vite+live2d+vue3+element-plus】实现桌面模型宠物+桌面管理系统应用(踩坑)

    脚手架 项目使用 electron-vite 脚手架搭建 ps:还有一个框架是 electron-vite ,这个框架我发现与pixi库有冲突,无法使用,如果不用pixi也可以用这个脚手架. node ...

  8. 写sql语句思路--28道关于教师、学生、成绩表的练习题---个人思路

    针对学生教师的28道练习题的思路 链接:https://pan.baidu.com/s/1TgqFAe7i0PAkZOm47-Jd0A 提取码:vvi6 部分截图如下: -- sql 28道练习题答案 ...

  9. Java权限认证框架比较

    认证.授权.鉴权和权限控制 定义 英文 实现方式 认证 确认声明者的身份 identification 根据声明者独特的识别信息 授权 获取用户的委派权限 authorization 颁发一个授信媒介 ...

  10. SQL去重distinct方法解析

    来源:https://www.cnblogs.com/lixuefang69/p/10420186.html SQL去重distinct方法解析 一 distinct 含义:distinct用来查询不 ...