当前位置:首页 > 技术知识 > 正文内容

「浅谈Java」1,sleep、wait、yield和join的区别

maynowei10个月前 (08-31)技术知识96

【浅谈Java】主要针对Java开发技术知识的讲解。不会大而全详细讲解某一技术知识,只在短暂无事的时刻让你学习或温习Java知识体系中的一叶飘零。


sleep

sleep 方法是属于 Thread 类中。sleep 过程中线程不会释放锁,只会阻塞线程,让出cpu给其他线程,但是他的监控状态依然保持着,当指定的时间到了又会自动恢复运行状态。可中断,sleep 给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会。

wait

wait 方法是属于 Object 类中的。wait 过程中线程会释放对象锁,只有当其他线程调用 notify 才能唤醒此线程。wait 使用时必须先获取对象锁,即必须在 synchronized 修饰的代码块中使用,那么相应的 notify 方法同样必须在 synchronized 修饰的代码块中使用,如果没有在synchronized 修饰的代码块中使用时运行时会抛出
IllegalMonitorStateException
的异常。

yield

和 sleep 一样都是 Thread 类的方法,都是暂停当前正在执行的线程对象,不会释放资源锁,和 sleep 不同的是 yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时间,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。还有一点和 sleep 不同的是 yield 方法只能使同优先级或更高优先级的线程有执行的机会。

join

等待调用join方法的线程结束之后,程序再继续执行,一般用于等待异步线程执行完结果之后才能继续运行的场景。例如:主线程创建并启动了子线程,如果子线程中要行大量耗时运算计算某个数据值,而主线程要取得这个数据值才能运行,这时就要用到 join 方法了。


【浅谈Java】第1篇文章到这里已结束。笔者是一个工作十年的Java码农,突然想写一些东西沉淀一下自身,就选择在这里开始了。学习是冰冻三尺非一日之寒,原与诸君共勉励。

相关文章

高考一词多义考点! 30个高频词汇,完形填空再也不怕啦

1. address·/a'dres/ v.处理(问题)We must address the issue of climate change.·/'aedres/ n.地址Pleas...

掌握C语言多线程:高效并发编程指南

一、多线程基础概念介绍多线程编程是现代软件开发中提高程序性能和响应性的重要技术。在C语言中,pthread(POSIX Threads)库是实现多线程编程的标准工具。本节将通俗易懂地介绍多线程的核心概...

python-oracledb——利用python连接Oracle数据库的好用方法

这篇文章最早发布在CSDN了,最近想尝试使用一下头条,重新转移过来了。背景介绍之前使用的数据库一直是MySql,偶尔使用PostgreSQL,都是利用的数据库连接池使用;最近需要在Oracle数据库取...

你可能疏忽的plsql和navicat连接Oracle注意点

在日常开发中,我们总是少不了要连接数据库,你是否遇到过填写的账号、密码、连接地址都对,但就是连接不上Oracle的情况?这里说一下其中一种连接不上Oracle的原因,这种情况简单,但很可能被疏忽。记下...

被 OpenAI 点名后,智谱刚刚发布新开源模型:国产最全能,一句话造出搜索引擎

国产大模型厂商的开源,还在提速。就在刚刚,智谱正式发布最新旗舰模型 GLM-4.5。按照智谱官方说法,这是一款「专为 Agent 应用打造的基础模型」。延续一贯的开源原则,目前这款模型已经在 Hugg...

一文带你彻底搞懂Proxy和Reflect!

有一道面试题,题目要求应用 Proxy 实现数据倒序访问,如: var arr=[1, 2, 3, 4]; arr[-1] 返回 4,arr[-2] 返回 3。这个题目很显然在考察 Proxy 对象的...