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. javascript 类class设置访问器setter时出现Maximum call stack size exceeded错误

    Maximum call stack size exceeded这个错误的意思是调用栈溢出,但是自己写的代码基本不可能出现.所以可能的原因是A调用了B,然后B再调用A,形成了循环调用.或者说是A自己调 ...

  2. WebUI自动化测试-监听元素有无变化

    from datetime import datetime,timedelta from selenium.webdriver.common.by import By def get_inocSum( ...

  3. Java跳动爱心代码

    1.计算爱心曲线上的点的公式 计算爱心曲线上的点的公式通常基于参数方程.以下是两种常见的参数方程表示方法,用于绘制爱心曲线: 1.1基于 (x, y) 坐标的参数方程 x = a * (2 * cos ...

  4. 架构师必知的11种API性能优化方法

    前言 接口性能优化是后端开发人员经常碰到的一道面试题,因为它是一个跟开发语言无关的公共问题. 这个问题既可以很简单,也可以相当复杂. 有时候,只需要添加一个索引就能解决. 有时候,代码需要进行重构. ...

  5. 【HDC 2024】华为云开发者联盟驱动应用创新,赋能开发者成长

    本文分享自华为云社区<[HDC 2025]华为云开发者联盟驱动应用创新,赋能开发者成长>,作者:华为云社区精选. 6月21日到23日,华为开发者大会(HDC 2024)于东莞松山湖举行,这 ...

  6. Python str 转 b’二进制串

    用raw_unique_escape来编码无义意的二进制串 bytes(strtext, encoding='raw_unique_escape')

  7. Swoole v6 能否让 PHP 再次伟大?

    大家好,我是码农先森. 现状 传统的 PHP-FPM 也是多进程模型的的运行方式,但每个进程只能处理完当前请求,才能接收下一个请求.而且对于 PHP 脚本来说,只是接收请求和响应请求,并不参与网络通信 ...

  8. C# Linq俩个list<Datarow> 取差集,并自定义字段

    可以自定义类 ,也可以从参考官网文档:Enumerable.Except 方法 (System.Linq) | Microsoft Learn List<DataRow> list1 = ...

  9. win10 搭建 npm 环境

    前言 最近,根据CSDN和博客园等文章的帮助下,搭建了一个npm的环境,现在将搭建过程记录下来,留作参考. 搭建过程 下载nodejs,我是使用的zip包安装的,安装包官网地址https://node ...

  10. ROS2开发BUG记录:在将 use_sim_timer 置为 true 时,节点的 Timer_Callback 行为“异常”

    问题: 在将 use_sim_timer 置为 true 时,节点 Timer_Callback 行为 "异常" .在回调函数中,使用 self.get_logger().info ...