使用ReentrantLock
2024-09-01 21:41:03
/**
* java.util.concurrent.locks包提供的ReentrantLock用于替代synchronized加锁
* 因为synchronized是Java语言层面提供的语法,所以我们不需要考虑异常,
* 而ReentrantLock是Java代码实现的锁,我们就必须先获取锁,然后在finally中正确释放锁。
* ReentrantLock是可重入锁,它和synchronized一样,一个线程可以多次获取同一个锁。
* 下述代码在尝试获取锁的时候,最多等待5秒。如果5秒后仍未获取到锁,tryLock()返回false,程序就可以做一些额外处理,而不是无限等待下去。
* 所以,使用ReentrantLock比直接使用synchronized更安全,线程在tryLock()失败的时候不会导致死锁。
* 必须先获取到锁,再进入try {...}代码块,最后使用finally保证释放锁;
* 可以使用tryLock()尝试获取锁
*/
class TestReentrantLock{
private final Lock lock = new ReentrantLock();
private int count;
public void add(int n){
try {
if(lock.tryLock(5, TimeUnit.SECONDS)){//5秒内尝试去获取锁
count += n;
}
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
lock.unlock();//释放锁
}
}
}
最新文章
- mysql centeros 安装
- Visual Studio Code 1.0.1 for python
- Aizu 2305 Beautiful Currency DP
- 树形结构的维护:BZOJ 3991: [SDOI2015]寻宝游戏
- HDU 5568 - BestCoder Round #63 - sequence2
- linux centos6.4 php连接sql server2008
- httplib,urllib和urllib2
- java代码 分解EXCEL(一)
- 联通假4G欺骗消费者!
- Mybatis的mapper代理开发dao方法
- Python解析XML文件
- JavaScript(八)
- redis源码解析(1):redisObject对象说明
- LMerge-github
- ubuntu下安装和配置pycharm和pyqt5
- note 8 字符串
- 【转】MySQL常见错误代码及代码说明参考
- jenkins学习:jenkins+gitlab
- int和Integer的自动拆箱/装箱相关问题
- Git - 基础介绍
热门文章
- Prometheus 【目录】
- mac 终端高亮显示~
- 【BZOJ2190】【Luogu P2158】 [SDOI2008]仪仗队
- mac安装jupyter
- 【读一本书】《昇腾AI处理器架构与编程》--神经网络基础知识(2)
- 转:mysql 安装失败 start service执行不下去
- Chrome DevTools开发者工具调试
- [TimLinux] Python 再谈装饰器
- CodeForces985F -- Isomorphic Strings
- 基于iCamera App Kit 测试oV5640 500w分辨率 摄像头 总结