博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中的ReentrantLock学习笔记
阅读量:6223 次
发布时间:2019-06-21

本文共 1120 字,大约阅读时间需要 3 分钟。

hot3.png

 Java中的ReentrantLock和synchronized两种锁定机制的对比

JAVA并发编程学习笔记之ReentrantLock

ReentrantLock可重入锁的使用场景

Java并发之CountDownLatch、CyclicBarrier和Semaphore

 

记录:

对Jfinal框架中CacheInterceptor类中的ReentrantLock的理解

类ReentrantLock中的:

115012_fNL3_3132303.png

类CacheInterceptor中的:

115030_Q3rz_3132303.png

使用的非公平策略的锁

 

在公平的锁上,线程按照他们发出请求的顺序获取锁,但在非公平锁上,则允许‘插队’:当一个线程请求非公平锁时,如果在发出请求的同时该锁变成可用状态,那么这个线程会跳过队列中所有的等待线程而获得锁。     非公平的ReentrantLock 并不提倡 插队行为,但是无法防止某个线程在合适的时候进行插队。

在公平的锁中,如果有另一个线程持有锁或者有其他线程在等待队列中等待这个所,那么新发出的请求的线程将被放入到队列中。而非公平锁上,只有当锁被某个线程持有时,新发出请求的线程才会被放入队列中。

非公平锁性能高于公平锁性能的原因:

在恢复一个被挂起的线程与该线程真正运行之间存在着严重的延迟。

假设线程A持有一个锁,并且线程B请求这个锁。由于锁被A持有,因此B将被挂起。当A释放锁时,B将被唤醒,因此B会再次尝试获取这个锁。与此同时,如果线程C也请求这个锁,那么C很可能会在B被完全唤醒之前获得、使用以及释放这个锁。这样就是一种双赢的局面:B获得锁的时刻并没有推迟,C更早的获得了锁,并且吞吐量也提高了。

当持有锁的时间相对较长或者请求锁的平均时间间隔较长,应该使用公平锁。在这些情况下,插队带来的吞吐量提升(当锁处于可用状态时,线程却还处于被唤醒的过程中)可能不会出现。

135711_Itne_3132303.png

volatile是被设计用来修饰被不同线程访问和修改的变量

 

140103_ImFt_3132303.png

1.获取CacheName,注解@CacheName中的value,如果没有配置此注解,就是actionkey(就是不包含参数的路径)

2.获取CacheKey(就包含参数的路径)

3.根据CacheName和CacheKey获取缓存的信息,如果为空,则去缓存信息.有的话,直接返回缓存数据

4.缓存数据为空时,走完controller中的方法后,开始cacheAtion.

5.cacheAtion,就是获取request里Attribute的键值进行缓存,再将controller里render的类型以name为_renderkey缓存起来

 

转载于:https://my.oschina.net/zhuqianli/blog/855378

你可能感兴趣的文章
spring中配置监听队列的MQ
查看>>
mysql删除重复记录,保存Id最小的一条
查看>>
前端 使用 crypto-js 对数据进行对称加密
查看>>
Js学习第十天----函数
查看>>
Python sql注入 过滤字符串的非法字符
查看>>
Spring学习笔记——Spring依赖注入原理分析
查看>>
平衡小车项目解读日志
查看>>
[1]朝花夕拾-JAVA类的执行顺序
查看>>
常用shell命令
查看>>
[js高手之路] vue系列教程 - vue的基本用法与常见指令(1)
查看>>
glGetString(GL_VERSION) returns “OpenGL ES-CM 1.1” but my phone supports OpenGL 2
查看>>
RDA PQ工具使用 (屏参调整)
查看>>
Servlet学习笔记(三):HTTP请求与响应
查看>>
HttpClient request payload post请求
查看>>
MySQL慢查询
查看>>
Bootstrap树控件(Tree控件组件)使用经验分享
查看>>
Linux搭建JavaEE开发环境与Tomcat——(十)
查看>>
JFinal 学习笔记之Handler包分析
查看>>
Redis总结(六)Redis配置文件全解
查看>>
“四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)
查看>>