java中awit和sleep的区别和线程安全性问题

news/2025/2/12 11:56:03/文章来源:https://www.cnblogs.com/ishoulgodo/p/18706216

awit和sleep的区别

从名称上来讲:
awit:等待。
sleep:休眠。 从属关系上来讲:
awit:awit这个方法是在对象上,只要是对象,就有这个方法
sleep:sleep是在Thread上,它是在线程上,是一个静态方法使用方式上来讲:
awit只能够在同步代码中去使用
sleep可以在任意的地方中去使用从阻塞时间上来讲:
awit需要等待别人。如果别人没有执行完,它是不能够干其他的事情的。
它会有一个超时时间,什么是超时时间呢?
我等待的时间太长了,时间太长了, 我就不能够再等待了。这个时候就会发生异常。会有异常
sleep:它会有一个休眠时间,这个休眠时间不会有任何的问题。
休眠完一定的时间,它自己就会醒过来。 不会有异常。同步处理:
awit:如果执行awit方法,其他线程会有机会执行当前的同步操作。  
sleep:如果执行sleep方法,那么其他线程没有机会执行当前的同步操作。  

线程的安全性问题

所谓的线程安全性问题:其实就是多个线程在并发执行时,修改了共享内存中共享对象的属性,导致的数据冲突问题。
我们可以通过下面的来理解

package part;
public class Java01 {public static void main(String[] args) {User u1 = new User();// Lambda表达式Thread t1 = new Thread(()->{u1.name ="张三";try {// 休眠1s钟后再去执行代码Thread.sleep(1000);// 休眠语句会让后面的代码等待,也就是说:休眠语句会让后面的打印语句等待1s钟后再执行} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("输出语句"+u1.name);});Thread t2 = new Thread(()->{u1.name ="李四";try {// 休眠1s钟后再去执行代码Thread.sleep(1000);// 休眠语句会让后面的代码等待,也就是说:休眠语句会让后面的打印语句等待1s钟后再执行} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("输出语句"+u1.name);});t1.start();t2.start();}
}
class User{String name;
}
//输出语句李四
//输出语句李四

解释1

为啥会输出2个李四呢?
因为:他们的对象u1是同一个。
张三线程把u1对象的名称更改为了张三,然后休眠。
与此同时,李四线程把u1对象的名称更改为了李四。然后休眠。
等待休眠结束:u1的对象名称都是李四了。
因此:输出2个李四
2个线程指向的是同一个对象哈。也就是2个线程打印的是同一个对象。
特别提醒:
java 会对每一个线程创建一个[栈内存],他们之间互相独立,互不影响。

解释2

为啥会输出2个李四呢?
代码中的u1是共享对象,两个线程同时修改它的name属性,没有同步机制,所以会出现竞态条件。
比如,t1设置name为“张三”,然后休眠,这时候t2可能将name改为“李四”。
然后两个线程都休眠结束后,所以打印的时候可能都看到“李四”。
也就是说:最后的name值取决于最后修改的那个线程。

尾声

准备开始学习java了。
今天学习的第九天,每天都会发文章,我要卷起来。
请小伙伴们监督我,奥利给

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/881264.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[PyTorch] DDP源码阅读

[PyTorch] DDP源码阅读PyTorch的DistributedDataParallel (DDP) 允许多台机器,多台GPU之间的数据并行。本文简单讲解DDP的流程,并从代码层面理解DDP如何访问底层的通信框架。DDP使用单机多进程来控制多个GPU。模型需要能放入单个GPU中。参考了PyTorch 源码解读之 DP & DD…

SQL注入之时间盲注

SQL注入之时间盲注 一、时间盲注原理 时间盲注技术的核心在于巧妙地运用数据库中的时间延迟函数(例如 MySQL 的 SLEEP() 函数或 PostgreSQL 的 PG_SLEEP() 函数)来验证注入条件的有效性。当注入条件成立时,数据库会执行这些延迟函数,从而导致页面响应时间显著增加;反之,若…

P2024 [NOI2001] 食物链(带权并查集)

这道题要用带权并查集,感觉没听懂只能先把自己能懂得写了; 数组b[i]表示i与根节点的关系,//0 : 同类 1:吃 2:被吃#include r1 == r2 && b[x] != b[y]说明x和y在同一集合,但他们与根节点的关系不是一样的,说明他们不是同类,是假话 #include<set> #includ…

2025苹果春季发布会前瞻:新品迭出,Apple Intelligence国行版即将上线!

随着2025年的到来,苹果公司的春季发布会也渐行渐近。作为科技行业的领军企业,苹果每一次的新品发布都备受瞩目。本次春季发布会,苹果预计会带来一系列令人期待的新品,同时,国行Mac用户也将迎来一个重大更新——Apple Intelligence功能的上线。随着2025年的到来,苹果公司的…

Python3测试框架unittest搭配自动化测试报告工具HTMLTestRunner

最近接触到Python的测试框架unittest, 浅浅的学习了一下。 unittest和HTMLTestRunner搭配,可以完成自动化测试的功能并生成自动化测试报告。 一. 简介Python内置的unittest模块,用于编写和执行单元测试。 HTMLTestRunner 是一个用于生成自动化测试报告的工具,扩展了 unittes…

毕业设计目前进度

毕业设计进度:基于VoIP的音频音协算法设计与实现 1、学习了MATLAB的使用并动手实践界面认识 变量命名 运算和程序结构 矩阵操作 绘制二维三维图形等 绘制波形图(或数据曲线图)通过学习matlab的使用,为编写代码和运行并检测音频质量打下基础,同时也学会了建立坐标轴并绘制图…

使用LM Studio部署DeepSeek 1.5B模型

下载LM Studio: https://installers.lmstudio.ai/win32/x64/0.3.9-6/LM-Studio-0.3.9-6-x64.exe 安装LM Studio: 略 打开LM Studio 设置语言启用内置代理,用于下载模型,否则大概率在Model Search中看不到模型信息,无法下载模型模型下载,两种方式: 第一种,通过LM Studio…

React—05—脚手架

使用npm全局下载create-react-app, 建议node>16。npm install create-react-app -g; 然后创建项目即可。create-react-app 项目名称 但是现在create-react-app有问题,有些库依赖的react18但是这个脚手架创建的默认是react19,而官方还没解决这个问题,建议用vite创建一…

2.9 CW 练时记录

前言 新的类型, 跟考试放的差不多的策略就行了 后面就是找时间复习, 然后找一下状态就好了 \(\rm{F}\) 看到这是个 \(\rm{C}\) 题, 先做这个 思路给定 \(p_{i, c}\) 表示位置 \(i\) 是字符 \(c\) 的概率, 确定 \(\displaystyle\sum_{c = 1}^{t} p_{i, c} = 1\) 一个有效的信息被…

SMU2025寒假训练周报2

这周状态其实不太好,很多时候心急总是卡简单题,中档题也有些难a,希望尽快调整 一.个人训练赛2 1. Linova and Kingdom 题目链接:Problem - C - Codeforces 每加一个点总体贡献就可能发生变化,那我们就处理每个点的贡献,将他的深度减去他孩子的总个数就是贡献,最后排序取…

无需服务器个性化域名重定向到其他网站

1. 准备工作 1. 申请个人域名免费方式:从 ClouDNS.net上创建账号申请即可,右上角可以选择中文。如果实在不会操作,可以参考:教你免费注册一个ClouDNS永久域名(保姆级教程) ,还可以自行搜索或问大模型或留言。 付费方式:从 主流域名注册商注册,国外:namesilo 比较便宜,…