使用String 的 intern做锁提高并发能力
一个场景:
某段代码只对同一个ip过来的请求同步处理:
比如ip为a的请求进入了同步代码块,那么后续的ip为a的请求则在代码块外边等着,这时来了一个ip为b的请求,那么这个请求也可以进去,也就是a的所有请求们是同步处理的,b的所有请求也是同步处理的,但是a和b互相不影响。
一般可能会这样写代码:
String ip = 从请求中获取的ip; synchronized(ip){...... }
这样写是不对的,因为我们并不能保证ip都是指向常量池中的,换句话说我们不能保证这个ip是同一个对象。
这里有个小技巧上面的代码只要改成
synchronized(从请求中获取的ip.intern()){ ...... }
就能保证锁对象唯一了,每次都是去常量池中取的对象。
假如某个ip长时间没有访问,那么常量池中该ip对应的对象可能会被清理掉,这个也不用怕,下次的访问又会在常量池中创建一个对象,后续的请求还是会拿这个对象作为进入此方法的条件。
那么有没有可能某个ip的请求已经进了代码了,这个ip的常量对象忽然被垃圾回收了呢?然后导致后续的同ip请求又在常量池中创建了一个新的对象?这个也不用担心,既然被当成了锁,那么在锁被打开之前不会被垃圾回收的
转载于:https://www.cnblogs.com/flying607/p/7809704.html
使用String 的 intern做锁提高并发能力相关推荐
- Java架构-每秒上千订单场景下的分布式锁高并发优化实践!
"上一篇文章我们聊了聊Redisson这个开源框架对Redis分布式锁的实现原理,如果有不了解的兄弟可以看一下:<拜托,面试请不要再问我Redis分布式锁实现原理>. 今天就给大 ...
- [转]String 之 new String()和 intern()方法深入分析
引入 String,是 Java 中除了基本数据类型以外,最为重要的一个类型了.很多人会认为他比较简单.但是和 String 有关的面试题有很多,下面我随便找两道面试题,看看你能不能都答对: Q1:S ...
- STM 软件事务内存——本质是为提高并发,通过事务来管理内存的读写访问以避免锁的使用...
对Java程序员来说,我们对面向对象的编程(OOP)自然都是烂熟于胸的,但语言也极大地影响了我们构建面向对象应用程序的方式.(现在的OOP已经和Alan Kay当初创造这个词时候的初衷大不相同了,他的 ...
- Tomcat7 性能优化,提高并发-NIO模式
1. 目的 通过优化tomcat提高网站的并发能力.当我们今天我们将这个优化讲完之前 优化完成后看能达到什么层次. 2. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响 ...
- tomcat7 性能优化,提高并发
1. 目的 通过优化tomcat提高网站的并发能力.当我们今天我们将这个优化讲完之前 优化完成后看能达到什么层次. 2. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响 ...
- tomcat7 ,JVM性能优化,提高并发
1. 目的 通过优化tomcat提高网站的并发能力.当我们今天我们将这个优化讲完之前 优化完成后看能达到什么层次. 2. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响 ...
- 线程池,Volatile,原子性类AtomicInteger,乐观锁悲观锁,并发工具类Hashtable,ConcurrentHashMap类,Semaphore类
目录 一.线程的状态 二.线程池 1.创建线程池的方式 1.1线程池-Executors默认线程池 1.2线程池-Executors创建指定上限的线程池 1.3线程池-ThreadPoolExec ...
- 锁与并发工具包与线程池与LockSupport与Fork/Join框架与并行流串行流与阻塞队列与JPS,jstack命令查看死锁查看线程状态与AQS个人笔记九
朝闻道,夕死可矣 本文共计 86564字,估计阅读时长1小时 点击进入->Thread源码万字逐行解析 文章目录 本文共计 86564字,估计阅读时长1小时 一锁 二Java中13个原子操作类 ...
- python diango 并发_利用gunicorn提高django的并发能力
引言 手头上的项目有一些采用django框架编写, 如果说并发量比较小的时候简单的runserver是可以应对的. 那么当并发达到一两千的时候,该怎么提高django的并发能力呢? Overview ...
最新文章
- 阿里集团搜索和推荐关于效率稳定性的思考和实践
- 科研小白在首次论文写作时需要注意哪些问题?
- 北京大学Tensorflow2.0笔记
- 用homebrew 升级安装python3.7 之后系统的python版本还是旧的怎么办
- 【杂谈】路由器在AP模式下使用多账号连接校园网(电脑)
- Windows渗透与提权:技巧总结篇
- 图片随着屏幕大小变化而变化
- RxJava2.0的生动形象的分析
- 让别人关机!(VB语言)
- 移动周刊第 188 期:Android 安全性要点与规范核心详析
- ILOG CPLEX 部分语法汇总
- bzoj4605 崂山白花蛇草水(动态开点线段树逃替罪羊重构K-D tree)
- GitHub开源协议
- CobaltStrike YARA规则 检测 环境搭建
- 戴尔服务器装系统蓝屏,win7系统安装戴尔电脑遇到蓝屏的解决方法
- CSS——CSS浮动与清除浮动
- Chrome 91 版本新特性 91 版本发行说明
- MATLAB基于深度学习框架GoogLeNet的网络摄像机图像分类
- 基于javaweb的美发店理发店会员管理系统ssm项目源码
- 交通灯数据集收集及比较