一个场景:

某段代码只对同一个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做锁提高并发能力相关推荐

  1. Java架构-每秒上千订单场景下的分布式锁高并发优化实践!

    "上一篇文章我们聊了聊Redisson这个开源框架对Redis分布式锁的实现原理,如果有不了解的兄弟可以看一下:<拜托,面试请不要再问我Redis分布式锁实现原理>. 今天就给大 ...

  2. [转]String 之 new String()和 intern()方法深入分析

    引入 String,是 Java 中除了基本数据类型以外,最为重要的一个类型了.很多人会认为他比较简单.但是和 String 有关的面试题有很多,下面我随便找两道面试题,看看你能不能都答对: Q1:S ...

  3. STM 软件事务内存——本质是为提高并发,通过事务来管理内存的读写访问以避免锁的使用...

    对Java程序员来说,我们对面向对象的编程(OOP)自然都是烂熟于胸的,但语言也极大地影响了我们构建面向对象应用程序的方式.(现在的OOP已经和Alan Kay当初创造这个词时候的初衷大不相同了,他的 ...

  4. Tomcat7 性能优化,提高并发-NIO模式

    1.  目的 通过优化tomcat提高网站的并发能力.当我们今天我们将这个优化讲完之前  优化完成后看能达到什么层次. 2.  服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响 ...

  5. tomcat7 性能优化,提高并发

    1.  目的 通过优化tomcat提高网站的并发能力.当我们今天我们将这个优化讲完之前  优化完成后看能达到什么层次. 2.  服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响 ...

  6. tomcat7 ,JVM性能优化,提高并发

    1.  目的 通过优化tomcat提高网站的并发能力.当我们今天我们将这个优化讲完之前  优化完成后看能达到什么层次. 2.  服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响 ...

  7. 线程池,Volatile,原子性类AtomicInteger,乐观锁悲观锁,并发工具类Hashtable,ConcurrentHashMap类,Semaphore类

      目录 一.线程的状态 二.线程池 1.创建线程池的方式 1.1线程池-Executors默认线程池 1.2线程池-Executors创建指定上限的线程池 1.3线程池-ThreadPoolExec ...

  8. 锁与并发工具包与线程池与LockSupport与Fork/Join框架与并行流串行流与阻塞队列与JPS,jstack命令查看死锁查看线程状态与AQS个人笔记九

    朝闻道,夕死可矣 本文共计 86564字,估计阅读时长1小时 点击进入->Thread源码万字逐行解析 文章目录 本文共计 86564字,估计阅读时长1小时 一锁 二Java中13个原子操作类 ...

  9. python diango 并发_利用gunicorn提高django的并发能力

    引言 手头上的项目有一些采用django框架编写, 如果说并发量比较小的时候简单的runserver是可以应对的. 那么当并发达到一两千的时候,该怎么提高django的并发能力呢? Overview ...

最新文章

  1. 阿里集团搜索和推荐关于效率稳定性的思考和实践
  2. 科研小白在首次论文写作时需要注意哪些问题?
  3. 北京大学Tensorflow2.0笔记
  4. 用homebrew 升级安装python3.7 之后系统的python版本还是旧的怎么办
  5. 【杂谈】路由器在AP模式下使用多账号连接校园网(电脑)
  6. Windows渗透与提权:技巧总结篇
  7. 图片随着屏幕大小变化而变化
  8. RxJava2.0的生动形象的分析
  9. 让别人关机!(VB语言)
  10. 移动周刊第 188 期:Android 安全性要点与规范核心详析
  11. ILOG CPLEX 部分语法汇总
  12. bzoj4605 崂山白花蛇草水(动态开点线段树逃替罪羊重构K-D tree)
  13. GitHub开源协议
  14. CobaltStrike YARA规则 检测 环境搭建
  15. 戴尔服务器装系统蓝屏,win7系统安装戴尔电脑遇到蓝屏的解决方法
  16. CSS——CSS浮动与清除浮动
  17. Chrome 91 版本新特性 91 版本发行说明
  18. MATLAB基于深度学习框架GoogLeNet的网络摄像机图像分类
  19. 基于javaweb的美发店理发店会员管理系统ssm项目源码
  20. 交通灯数据集收集及比较

热门文章

  1. mysql字段获取当前日期格式_mysql数据库,获取当前日期及格式化
  2. NI FlexLogger 2020 R3中文版
  3. Entity Framework如何得到数据库表的名字
  4. Docker 安装redis(四)
  5. Java中的Iterable与Iterator详解
  6. ubuntu ufw防火墙
  7. Educational Codeforces Round 12 D. Simple Subset 最大团
  8. sitemesh官网简介,安装配置教程。(非常适合新手)
  9. PHP获取 当前页面名称、主机名、URL完整地址、URL参数、获取IP
  10. All in one TFS 项目建立