面试官:请你说一下sleep()、wait()、join()和yield()的区别

面试官:请你说一下sleep()、wait()、join()和yield()的区别

我们先来介绍下锁池与等待池的概念。

首先来看下锁池的概念

所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁已经被其中一个线程得到,则其它线程需要在这个锁池进行等待,当前面的线程释放同步锁侯锁池中的线程去竞争同步锁,当某个线程得到后会进入就绪队列进行等待cpu资源分配。

接着来看看等待池的概念

当我们调用wait() 方法后,线程会放到等待池中,等待池的线程是不会去竞争同步锁。只有调用了notify() 或notifyAll() 后等待池的线程才会开始去竞争锁,notify() 是随机从等待池选出一个线程放到锁池,而notifyAll() 是将等待池的所有线程放到锁池当中。

sleep 是 Thread 类的静态本地方法,wait 则是Object的本地方法。

sleep 方法不会释放lock,但是wait 会释放,而且会加入到等待队列中。

sleep就是把cpu的执行资格和执行权释放出去,不再运行此线程,当定时事件结束再取回cpu资源,参与cpu的调度,获取到cpu资源后就可以继续运行了,而如果sleep时该线程有锁,那么sleep不会释放这个锁,而是把锁带着进入了冻结状态,也就是说其它需要这个锁的线程根本不可能获取到这个锁。也就是说无法执行程序,如果在睡眠期间其它线程调用了这个线程的interrupt方法,那么这个线程也会抛出interruptexception异常返回,这点和wait是一样的。

sleep方法不依赖于同步器synchronized,但是wait需要依赖synchronized关键字。

sleep不需要被唤醒(休眠之后退出阻塞),但是wait需要(不指定时间需要被别人中断)。

TextCortex TextCortex

AI写作能手,在几秒钟内创建内容。

TextCortex 62 查看详情 TextCortex

sleep一般用于当前线程休眠,或者轮询暂停操作,wait则多用于多线程之间的通信。

sleep会让出CPU执行时间且强制上下文切换,而wait则不一定,wait后可能还是有机会重新竞争到锁继续执行的。

yield() 执行后线程直接进入就绪状态,马上释放了cpu的执行权,但是依然保留了cpu的执行资格,所以由可能cpu下次进行线程调度还会让这个线程获取到执行权继续执行。

(学习视频分享:java视频教程)

join() 执行后线程进入阻塞状态,例如在线程B中调用线程A的join() ,那线程B会进入到阻塞队列,指导线程A结束或中断线程。

public static void main(String[] args) throws InterruptedException {        Thread t1=new Thread(()->{            try {                Thread.sleep(4000);            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println("休眠sleep线程");        });        t1.start();        t1.join();        System.out.println("线程执行完成");    }

原文链接:https://blog.csdn.net/lxn1023143182/article/details/114134498

相关推荐:java面试题及答案

以上就是面试官:请你说一下sleep()、wait()、join()和yield()的区别的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1020753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 01:18:50
下一篇 2025年12月2日 01:19:11

相关推荐

  • 如何在mysql中使用JOIN关联多表

    答案是使用JOIN可关联多表查询数据,需明确连接条件并选择合适类型。通过INNER JOIN获取匹配记录,LEFT/RIGHT JOIN保留主表全部数据,结合ON指定关联字段,如用户、订单、商品三表通过外键关联查询信息,并建议添加索引、避免冗余JOIN以优化性能。 在 MySQL 中使用 JOIN …

    2025年12月6日 数据库
    000
  • SQL中JOIN操作中的NULL匹配 JOIN连接时NULL值的匹配问题解决方案

    避免sql join中null匹配问题的方法包括:1.使用coalesce函数替换null值;2.通过is null条件显式匹配null;3.采用外连接保留所有行;4.创建自定义函数处理复杂逻辑。关键在于理解null不等于null的特性,利用sql函数和语法处理,同时在数据库设计阶段减少null值存…

    2025年12月3日 数据库
    000
  • Mysql中的join操作详解

    这篇文章主要介绍了mysql join操作的相关资料,需要的朋友可以参考下  join的类型 1.  内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结。 2.  外联结:分为外左联结和外右联结。 案例背景 create table java (name varchar(25…

    2025年12月2日
    000
  • 详解MySQL JOIN原理介绍

    一.Join语法概述 join 用于多表中字段之间的联系,语法如下: … FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表;table2:右表。 JOIN 按照功能大致分为如下三类: INNER JOIN(内…

    2025年12月2日 数据库
    000
  • mysql中JOIN连接查询如何使用_mysql JOIN语法教程

    答案:JOIN用于关联多表数据,INNER JOIN返回匹配的记录,LEFT JOIN保留左表全部记录,RIGHT JOIN保留右表全部记录,FULL JOIN可通过UNION实现,多表连接可使用别名提升可读性,且需注意连接顺序对性能的影响。 在MySQL中,JOIN用于将两个或多个表根据相关列进行…

    2025年12月2日 数据库
    000
  • 面试官:请详细说明final关键字的作用,以及它与static的区别

    前言: 果不其然,在上次的面试中面试官又问了这样的问题:请你说下final关键字的具体含义,并详细讲解它的作用以及它与static的区别。为了让正在面试中的各位重视这个问题,特意将答案整理出来以供大家参考。 1、final关键字的含义 final表面意思就是不可更改的,恒量的意思;类似于C语言中的c…

    2025年12月2日 java
    000
  • sql中left join和right join的区别 一文搞懂左右连接的不同使用场景

    left join 和 right join 的区别在于以哪张表为基准保留所有行。left join 保留左表所有行,即使右表无匹配,此时右表列值为 null;right join 保留右表所有行,即使左表无匹配,此时左表列值为 null。例如,在 customers 表与 orders 表的连接中…

    2025年12月1日 数据库
    000
  • MySql中如何使用JOIN

    join的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。 先创建两个表,下面用于示例 CREATE TABLE t_blog( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(50), typeId …

    2025年12月1日
    000
  • 【面试】如何保障消息100%投递成功?如何保证消息幂等性?

    一、前言 我们小伙伴应该都听说够消息中间件MQ,如:RabbitMQ,RocketMQ,Kafka等。引入中间件的好处可以起到抗高并发,削峰,业务解耦的作用。 如上图: (1)订单服务投递消息给MQ中间件 (2)物流服务监听MQ中间件消息,从而进行消费 我们这篇文章讨论一下,如何保障订单服务把消息成…

    2025年11月28日 java
    000
  • sleep()和 wait()有什么区别?

    sleep()不释放锁,wait()释放锁;前者用于暂停线程,后者用于线程间通信,且wait()必须在synchronized中使用以确保线程安全。 简单来说,sleep() 让线程休眠一段时间,让出CPU资源但不释放锁;而 wait() 则会释放锁,让其他线程有机会获取锁并继续执行。 解决方案 s…

    2025年11月28日 java
    000
  • mysql中INNER JOIN和LEFT JOIN区别_mysql JOIN类型操作

    INNER JOIN只返回两表匹配的行,LEFT JOIN返回左表全部记录且右表无匹配时补NULL;2. 例如查询用户与订单数据时,INNER JOIN仅列出有订单的用户,LEFT JOIN包含所有用户并显示未下单者订单信息为NULL;3. 实际应用中,INNER JOIN适用于精确匹配场景如已支付…

    2025年11月28日 数据库
    000
  • “雇佣”ChatGPT编码,应如何进行面试?

    ​译者 | 朱先忠 策划 | 徐杰承 与开发人员信任的其他软件开发工具不同,AI工具在训练、构建、托管和使用方式等方面都存在一些独特的风险。   Typewise.app 面向客户服务和销售团队的AI写作解决方案。 39 查看详情 自2022年底ChatGPT发布以来,互联网上便充斥着对其几乎相同比…

    2025年11月27日
    000
  • Kill掉MySQL中所有sleep的client线程

    写了一个脚本,run这个脚本,就可以kill掉mysql中所有sleep的client线程vim killsleep.sh #It is used to kill processlist of mysql sleep #!/bin/shwhile : 豆包AI编程 豆包推出的AI编程助手 1697 …

    2025年11月26日
    000
  • MySQL中join用法解析

    MySQL中join用法解析 实例数据库如下: student表: mysql> select * from student;+———–+———–+——+——+——-+| Sno | Sname | Ssex | Sage | Sdept |…

    2025年11月26日 数据库
    000
  • MySQL中JOIN操作详解 JOIN语句在多表查询中的应用实践

    inner join取两表交集,left join保留左表全部记录,right join与left相反,full outer join需用union实现;多表连接要注意顺序、索引和笛卡尔积;优先使用标准join语法。inner join只返回满足条件的行,适合双方数据都需存在的场景;left joi…

    2025年11月25日 数据库
    000
  • Java面试八股文2025版:高频考点与破解思路

    2025年Java面试核心仍是JVM、多线程与并发、Spring生态,需深入理解底层原理并结合项目实战,通过源码分析、图示和手写代码展现深度,避免死记硬背,突出解决问题的思路与技术专精,同时体现技术广度与软技能。 Java面试,特别是2025年这个时间点,它依然是那套“八股文”的底子,但又远不止于此…

    2025年11月17日
    000
  • 关于ThinkPHP的join关联查询不使用默认的表前缀

    下面由thinkphp教程栏目给大家介绍thinkphp 的join关联查询不使用默认的表前缀,希望对需要的朋友有所帮助! ThinkPHP 的join关联查询不使用默认的表前缀 关于ThinkPHP 的关联查询,官方文档是这样描述的: 上述join函数中需要三个参数,分别是: join 要关联的(…

    2025年11月14日
    000
  • java工程师面试——volatile关键字

    一、volatile到底做了什么 (volatile保证有序性,可见性,不能保证原子性) (视频教程推荐:java视频教程) 1、禁止了指令重排 立即学习“Java免费学习笔记(深入)”; 2、保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量值,这个新值对其他线程是立即可见的 3…

    2025年11月10日 java
    100
  • java面试中常见的数组题目汇总(一)

    题目难度:* * (学习视频推荐:java课程) 1、排序次序 【题目】 白瓜面试 白瓜面试 – AI面试助手,辅助笔试面试神器 40 查看详情 立即学习“Java免费学习笔记(深入)”; 返回一个数字数组的排序值,比如数据 [6,2,5,0] 的返回是 [4,2,3,1] 【代码】 p…

    2025年11月10日 java
    000
  • java面试中常见的数组题目汇总(二)

    1、斐波那契数列 【题目】 大家都知道斐波那契数列,现在要求输入一个整数 n,请你输出斐波那契数列的第 n 项(从 0 开始,第 0 项为 0)。 (视频教程推荐:java课程) 立即学习“Java免费学习笔记(深入)”; 【代码】 package swear2offer.array;public …

    2025年11月10日 java
    100

发表回复

登录后才能评论
关注微信