当前位置: 首页 > wzjs >正文

可以做幻灯片的网站甘肃网站建设专业品牌

可以做幻灯片的网站,甘肃网站建设专业品牌,微信公众号开放平台,品牌型网络营销目标ReentrantLock类详解 1. 核心概念 ReentrantLock 是Java中基于 java.util.concurrent.locks.Lock 接口实现的可重入互斥锁,提供比 synchronized 更灵活的锁控制机制。关键特性包括: 可重入性:同一线程可多次获取同一把锁。公平性选择&#…

ReentrantLock类详解


1. 核心概念

ReentrantLock 是Java中基于 java.util.concurrent.locks.Lock 接口实现的可重入互斥锁,提供比 synchronized 更灵活的锁控制机制。关键特性包括:

  • 可重入性:同一线程可多次获取同一把锁。
  • 公平性选择:支持公平锁(先请求先获取)和非公平锁(默认,允许插队)。
  • 可中断锁获取:线程等待锁时可响应中断。
  • 超时尝试锁:指定时间内尝试获取锁,避免无限等待。

2. 核心方法与使用

(1) 基础用法
import java.util.concurrent.locks.ReentrantLock;public class ReentrantLockDemo {private final ReentrantLock lock = new ReentrantLock();public void safeMethod() {lock.lock();  // 获取锁try {// 临界区代码System.out.println("线程安全操作");} finally {lock.unlock();  // 必须手动释放锁}}
}
  • 关键点
    • 必须使用 try-finally 确保锁的释放,防止死锁。
    • 锁的获取与释放必须成对出现,否则导致其他线程永久阻塞。

(2) 高级方法
方法作用
boolean tryLock()尝试非阻塞获取锁,成功返回 true,失败立即返回 false
boolean tryLock(long timeout, TimeUnit unit)超时等待获取锁,超时后返回 false
void lockInterruptibly()可中断地获取锁,等待过程中可响应中断。
boolean isHeldByCurrentThread()判断当前线程是否持有锁。
int getHoldCount()返回当前线程持有该锁的次数(重入次数)。

3. 公平锁与非公平锁

(1) 构造函数
// 默认非公平锁(性能更高,允许线程插队)
ReentrantLock nonFairLock = new ReentrantLock(); // 公平锁(按请求顺序分配锁,减少线程饥饿)
ReentrantLock fairLock = new ReentrantLock(true); 
(2) 对比
特性非公平锁公平锁
性能高(减少线程切换开销)低(需维护等待队列)
线程饥饿可能发生(新线程可能插队)避免线程饥饿
适用场景高并发、锁持有时间短严格要求顺序的业务(如订单处理)

4. 与synchronized的对比

对比项ReentrantLocksynchronized
锁获取方式显式调用 lock()unlock()隐式获取和释放(代码块或方法)
可中断性支持(lockInterruptibly()不支持
超时机制支持(tryLock(timeout)不支持
公平性可配置仅非公平
锁绑定条件支持多个 Condition一个对象只能绑定一个等待队列
性能高并发下更优优化后接近(低竞争场景更简单)

5. Condition条件变量

Condition 用于替代 Object.wait()/notify(),实现更精准的线程等待与唤醒。

(1) 基本用法
private final ReentrantLock lock = new ReentrantLock();
private final Condition condition = lock.newCondition();public void await() throws InterruptedException {lock.lock();try {condition.await();  // 释放锁并等待} finally {lock.unlock();}
}public void signal() {lock.lock();try {condition.signal(); // 唤醒一个等待线程} finally {lock.unlock();}
}
(2) 多条件示例(生产者-消费者模型)
private final Condition notFull = lock.newCondition();  // 队列未满条件
private final Condition notEmpty = lock.newCondition(); // 队列非空条件// 生产者
public void put(Object item) throws InterruptedException {lock.lock();try {while (queue.isFull()) {notFull.await(); // 等待队列未满}queue.add(item);notEmpty.signal();  // 唤醒消费者} finally {lock.unlock();}
}// 消费者
public Object take() throws InterruptedException {lock.lock();try {while (queue.isEmpty()) {notEmpty.await(); // 等待队列非空}Object item = queue.remove();notFull.signal();    // 唤醒生产者return item;} finally {lock.unlock();}
}

6. 最佳实践与注意事项

  1. 避免锁泄漏:确保 unlock()finally 块中执行。
  2. 减少锁持有时间:仅在必要代码段加锁,提升并发性能。
  3. 优先使用非公平锁:除非业务严格要求顺序。
  4. 合理使用Condition:避免复杂条件逻辑导致代码难以维护。

总结

ReentrantLock 提供了比 synchronized 更精细的锁控制能力,适用于高并发、需要灵活锁管理的场景。通过结合 Condition 和公平性策略,可以实现复杂的线程协作逻辑。然而,其手动管理锁的特性也要求开发者更谨慎地编写代码,避免死锁和资源泄漏。


文章转载自:

http://AqXbwORw.nrLsg.cn
http://oUnXh6jE.nrLsg.cn
http://Nc9Te6jF.nrLsg.cn
http://EoPMTWxE.nrLsg.cn
http://TwdHx4Pr.nrLsg.cn
http://UcYZy7j0.nrLsg.cn
http://hRwwJcAJ.nrLsg.cn
http://wZhfZTWW.nrLsg.cn
http://bMuLqtC1.nrLsg.cn
http://UiZ4KlwN.nrLsg.cn
http://KZUwuZ6C.nrLsg.cn
http://vTiKod2z.nrLsg.cn
http://ypFFeEY5.nrLsg.cn
http://jJurjQqr.nrLsg.cn
http://ytVmBv4q.nrLsg.cn
http://lcqAvKuh.nrLsg.cn
http://eqqyRTxy.nrLsg.cn
http://MjmpA0En.nrLsg.cn
http://0mxPrcfS.nrLsg.cn
http://naxIiG4n.nrLsg.cn
http://FEFFlgbt.nrLsg.cn
http://7C9vH0Kt.nrLsg.cn
http://PamTsu9H.nrLsg.cn
http://vqgmL0NO.nrLsg.cn
http://sf3ou7bN.nrLsg.cn
http://lY35e9TY.nrLsg.cn
http://5Bgk23ey.nrLsg.cn
http://sazd2Mis.nrLsg.cn
http://njIuaCEs.nrLsg.cn
http://5bo6suUs.nrLsg.cn
http://www.dtcms.com/wzjs/769697.html

相关文章:

  • 韩国网站设计风格同城发广告的平台有哪些
  • flex网站模板建筑设计网址大全
  • 四川网站开发公司想学网站建设什么的
  • 外贸视频网站快递公司网站模板
  • 公司企业邮箱注册申请广州网站排名优化价格
  • 网站开发客户需求分析晋江企业网站开发
  • 可信赖的响应式网站wordpress 弹出层
  • 网站开发 都包含什么语言网络营销策划书800字
  • 网站内容页做301网页版梦幻西游吸血鬼怎么过
  • 甘肃网站建设哪家便宜网站建设存在的问题及解决办法
  • 济源网站建设哪家好公众号免费模板
  • 深圳网站设计公司哪个抚州网站开发机构
  • 旅游网站开发毕业设计做网站的服务器
  • 查建设标准网站seo排名赚下载
  • 从seo角度谈网站建设淄博网站建设优惠臻动传媒
  • 广东网站se0优化公司电商网站项目
  • 郑州企业建网站制作哪个网站可以做代销
  • 怎么做才能让网站快速收录红动在线设计平台
  • 网站有多少个做视频网站每部电影都要版权
  • 北京市建设教育协会网站wordpress 文章 附件
  • 建设旅游业网站目的宣城网站 建设
  • 长沙好的网站建设品牌乐平市建设局网站
  • 南京建站公司哪家好斗门区住房和城乡建设网站
  • 网站建设总流程谷歌浏览器搜索引擎入口
  • wordpress配置文件下载如何网站优化排名
  • 咖啡设计网站initial wordpress
  • 茂名网站建设方案外包代账公司如何拉客户
  • redis网站开发教程互动营销
  • 网站上的动态背景怎么做的wordpress是php吗
  • 专门做单页的网站网站建设汇报评估