千家信息网

Java1.8中StampedLock的作用是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关Java1.8中StampedLock的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Stamped
千家信息网最后更新 2026年11月02日Java1.8中StampedLock的作用是什么

本篇文章给大家分享的是有关Java1.8中StampedLock的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

StampedLock把读分为了悲观读和乐观读,悲观读就等价于ReadWriteLock的读,而乐观读在一个线程写共享变量时,不会被阻塞,乐观读是不加锁的。所以没锁肯定是比有锁的性能好,这样的话在大并发读情况下效率就更高了!

StampedLock的用法稍稍有点不同,在获取锁和乐观读时,都会返回一个stamp,解锁时需要传入这个stamp,在乐观读时是用来验证共享变量是否被其他线程写过。来看一下官方示例

其上的操作在乐观读时,如果有写操作修改了共享变量则升级乐观读为悲观读锁,这样避免乐观读反复的循环等待写锁的释放,避免浪费CPU资源。所以在我们的使用StampedLock的时候,建议这样操作。

看起来好像StampedLock性能又比ReadWriteLock锁好,那是不是都可以用StampedLock抛弃ReadWriteLock?

并不是的,StampedLock不是可重入锁,所以不支持重入,并且StampedLock不支持条件变量,也就是没Condition。如果是线程使用writeLock()或者readLock()获得锁之后,线程还没执行完就被interrupt()的话,会导致CPU飙升....坑啊

我们来看下源码

首先里面是个无限循环,然后 if (interruptible && Thread.interrupted())已经得知调用的interruptible参数传入的是false,所以Thread.interrupted()也不会执行到,也一定调用不到cancelWaiter,所以就一直循环循环,CPU使用率就会涨涨涨。

所以如果要使用中断功能就得用readLockInterruptibly()或者writeLockInterruptibly()来获得锁。


以上就是Java1.8中StampedLock的作用是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

乐观 变量 线程 循环 悲观 作用 性能 更多 知识 篇文章 不同 实用 持重 这样的话 也就是 使用率 功能 参数 官方 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 互联网巨头科技公司 互联网科技开发公司 青岛互联网科技公司 宜安科技 互联网金融 苏州大垚互联网科技 互联网科技宣传片 哈尔滨新华互联网科技 互联网科技公司的市场部门 银川新华互联网科技职业技术培训学校图片 阿里互联网科技公司 昊天互联网科技有限公司 互联网科技公司有风险吗 用友工业互联网科技发展 合肥互联网科技公司公章图片 云南省自由互联网科技有限公司 卡尔迅互联网科技有限公司 工业互联网科技创业 珠海东科互联网科技有限公司 广东猫王互联网科技有限公司电话 互联网新科技 疫情对互联网科技公司影响 金融科技创新监管互联网金融 互联网的科技创新 奇酷互联网科技公司 贷财互联网科技 广州善班互联网科技 如何创新互联网科技 下一代互联网重大应用科技园 神州科技互联网有限公司
0