Java并发编程之美(1) ReentrantLock重入锁

本文深入探讨了Java并发编程中ReentrantLock的使用及特性,对比synchronized关键字,介绍了lock、tryLock方法及公平锁的概念,展示了其在多线程环境下对变量进行累加操作的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java并发编程之美(1)ReentrantLock重入锁

简介

在JDK5.0版本之前,重入锁的性能远远好于synchronized关键字,
JDK6.0版本之后synchronized 得到了大量的优化,使得两者性能差距不大. 
与synchronized相比,重入锁有着显示的操作过程,
我们可以手动指定何时加锁,何时释放锁,
因此重入锁对逻辑控制的灵活性要远远好于synchronized, 
重入锁可以完全替代synchronized关键字

lock

  • 我们先使用最简单的一段代码示例:开启两个线程对一个成员变量做累加
    在这里插入图片描述

在这里插入图片描述

  • 可以看到结果跟我们预期的一样

在这里插入图片描述

tryLock

tryLock方法两个参数,第一个表示等待时长,第二个表示单位.
锁请求最多5秒,成功得到返回true否则false

在这里插入图片描述

tryLock方法也可以不带参数,申请锁成功会立即返回true否则返回false.
这种模式不会引起线程等待,因此也不会导致死锁.

在这里插入图片描述

公平锁

一般锁的申请都是非公平的,而公平锁基本可以保证先到先得.因此不会产生饥饿
相对而言公平锁的性能也会非常低下.
在这里插入图片描述

可以看到两个线程是交替获得锁

在这里插入图片描述

................未完待续.....................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值