千家信息网

Java1.8中StampedLock的作用是什么

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,本篇文章给大家分享的是有关Java1.8中StampedLock的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Stamped
千家信息网最后更新 2025年12月04日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安全错误 数据库的锁怎样保障安全 深圳水木网络技术有限公司简介 沈阳直播软件开发公司哪家好 炫我集群管理软件的服务器 安徽瑞熙软件开发有限公司简介 上海皓网络技术有限公司 简网络技术对教育的影响 收到软件开发首批费用 宜兴购买计算机网络技术推广设备 怎么根据应用软件配置服务器 守望先锋连接服务器断开 数据打印还是保存在服务器更安全 网吧服务器上网速度快 网络安全中的假冒名单 合肥点餐系统软件开发哪家好 国家对网络安全的文件 顺义区网络安全周 软件开发 一审 学软件开发枯燥吗 西双版纳旅游团软件开发 网络技术微信加人 上海程序软件开发价位 海南互联网科技发展 关于网络安全与执法安全的论文 网络安全应该怎么宣传 互联网金融科技公司排名 全橙看家直播服务器超时 超级表格导不出数据库 redis多个数据库 现在国内对日软件开发怎么样 软件开发里程碑设计
0