java中awit和sleep的区别和线程安全性问题
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了。
今天学习的第九天,每天都会发文章,我要卷起来。
请小伙伴们监督我,奥利给
作者:流年少年
出处:https://www.cnblogs.com/ishoulgodo/
本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
如果文中有什么错误,欢迎指出。以免更多的人被误导。
出处:https://www.cnblogs.com/ishoulgodo/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

支付宝

微信
如果文中有什么错误,欢迎指出。以免更多的人被误导。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体
2021-02-09 dart类详细讲解