当前位置: 首页 > 知识库问答 >
问题:

并发Java:Reentry antLock是一个错误的设计吗?

越飞翮
2023-03-14

我知道ReentantLock使用AbstractQueuedSynsynizer(AQS)来实现Lock。但是实现的细节,我无法理解。

我知道AQS使用挥发性、CAS和自旋来同步。但是,这些动作只控制“状态”成员。

尽管如此,我仍然支持你。停车并上锁。unpark可以同步线程的缓存线。但如果从来没有争用,就永远不会调用LockSupport方法。像这样:1。穿线起跑

2.线程B启动并运行

3.线程A:

lock.lock();
try{
  //modify some shared members
  ....
}finally{
  lock.unlock();
}

4.然后线程B:

lock.lock();
try{
  //read shared members
  ....
}finally{
  lock.unlock();
}

没有争用,线程B不调用LockSupport方法。

lock.lock()仅CAS部件的状态,并且lock.unlock()将易失性状态修改为0。

为什么线程B可以看到线程A关于共享成员的修改?

为什么ReentrantLock可以用作“已同步”?

我没有看到任何像fullFence这样的同步内存的代码。

哪些代码实现了线程缓存的同步?

谢啦!

共有1个答案

公冶嘉
2023-03-14

CAS操作定义在关系之前发生,因此Java内存模型保证从一个线程到另一个线程的内存修改是可见的。

 类似资料:
  • 面试题 如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了。为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先。 如果你确实有真才实学,在互联网公司里干过高并发系统,那你确实拿 offer 基本如探囊取物,没啥问题。面试官也绝对不会这样来问你,否则他就是蠢。 假设你在某知名电商公司干过高并发系统,用户上亿,一天流量几十亿

  • 我已经从http://hayageek.com/login-with-google-plus-javascript-api/ 我已经使用我的client_id,api密钥实现了代码,并且还遵循了Google oauth2中invalid_client的说明,但仍然收到相同的错误。 也在OAuth同意屏幕中并提及产品名称和电子邮件地址 错误:无效_client 应用程序:Project_Name 您

  • 主要内容:一、写在前面,二、背景回顾,三、实时计算平台与数据查询平台之间的耦合,四、下集预告一、写在前面 之前更新过一个“亿级流量系统架构”系列,主要讲述了一个大规模商家数据平台的如下几个方面: 如何承载百亿级数据存储 如何设计高容错的分布式架构 如何设计承载百亿流量的高性能架构 如何设计每秒数十万并发查询的高并发架构 如何设计全链路99.99%高可用架构。 接下来,我们将会继续通过几篇文章,对这套系统的可扩展架构、数据一致性保障等方面进行探讨。 如果没看过本系列文章的同学可以先回过头看

  • 当我尝试在heroku打开我的应用程序时,我看到了下面一个屏幕,上面写着: 出现错误的日志如下: 2014-10-14T13:43:20.222314+00:00 Heroku[router]:at=error code=h10 desc=“App brassed”method=get path=“/”host=dry-reaches-7872.herokuapp.com request_id=5

  • 我们要自己设计一个IOC,那么目标是什么呢? 我们的IOC容器要可以存储对象,还要有注解注入的功能即可。 Java语言允许通过程序化的方式间接对Class进行操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数、属性和方法等。Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能,

  • 主要内容:1.负载均衡,2.分布式微服务,3.缓存机制,4.分布式关系型数据库,5.分布式消息队列,6.CDN 内容分发网络,7.其他,8.总结1.负载均衡 靠优化单台机器的内存、CPU、磁盘、网络带宽,使其发挥极致性能,已经不太现实。 负载均衡,它的职责是将网络请求 “均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况 通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。 常见的负载算法: 随机算法