前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >synchronized关键字

synchronized关键字

作者头像
宇宙之一粟
发布2020-11-24 11:35:35
3610
发布2020-11-24 11:35:35
举报
文章被收录于专栏:宇宙之_一粟宇宙之_一粟

Java 平台会为它创建的每个对象记录一个特殊的标记,这个标记叫监视器(monitor)。synchronized 使用这些监视器(或叫锁)指明,随后的代码可以临时把对象渲染成不一致的状态。synchronized 修饰的代码块或方法会发生一系列事件,详述如下:

(1) 线程需要修改对象时,会临时把对象变成不一致状态;

(2) 线程获取监视器,指明它需要临时互斥存储这个对象;(3) 线程修改对象,修改完毕后对象处于一致的合法状态;

(4) 线程释放监视器。

如果在修改对象的过程中,其他线程尝试获取锁,Java 会阻塞这次尝试,直到拥有锁的线程释放锁为止。

注意,如果程序没有创建共享数据的多个线程,就无需使用 synchronized 语句。如果自始至终只有一个线程访问某个数据结构,就无需使用 synchronized 保护这个结构。

获取监视器不能避免访问对象,只能避免其他线程声称拥有这个锁——这一点至关重要。为了正确编写并发安全的代码,开发者要确保,修改或读取可能处于不一致状态的对象之前,得先获取对象的监视器。

换个角度来说,如果 synchronized 修饰的方法正在处理一个对象,并且把这个对象变成非法状态,那么读取这个对象的另一个方法(没使用 synchronized 修饰)仍能看到这个不一致的状态。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档