首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java并发指南:用private (static)final Object lock = new Object() 保护临界区

Java并发指南:用private (static)final Object lock = new Object() 保护临界区

作者头像
崔认知
发布2023-06-19 14:34:47
发布2023-06-19 14:34:47
5870
举报
文章被收录于专栏:nobodynobody

内容大纲


建议

使用private (static)final Object lock = new Object() 锁来保护临界区

原因

1、不使用权限不可控制的监视器对象

不要这么做

  • synchronized实例方法或是实例方法内synchronized块;使用的this 监视器对象;
  • synchronized静态方法;使用的是geClass()监视器对象;

2、不使用共享的监视器对象;共享的监视器对象可能造成死锁或不可控的风险

不要使用的监视器对象

  • Boolean 监视器对象
  • 原生类型监视器对象
  • 自动封箱类型监视器对象
  • new String("xxx").intern()共享监视器对象
  • 字符串值:String lock = "Lock" 缓存的 监视器对象
  • java.lang.Integer#valueOf(int) 缓存的监视器对象等
  • getClass() public权限的 监视器对象,子类getClass()不同的监视器对像
  • classname 监视器对象
  • class.forName()监视器对象

可以使用的监视器对象:

  • private final String lock = new String("LOCK");
  • private final Object lock = new Object();

3、static数据使用static 监视器对象

不要这么做:

  • static数据使用了非static的监视器
  • synchronized方法内置监视器保护static数据

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 认知科技技术团队 微信公众号,前往查看

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

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

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