/**

* 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();//释放锁
}
}
}

最新文章

  1. mysql centeros 安装
  2. Visual Studio Code 1.0.1 for python
  3. Aizu 2305 Beautiful Currency DP
  4. 树形结构的维护:BZOJ 3991: [SDOI2015]寻宝游戏
  5. HDU 5568 - BestCoder Round #63 - sequence2
  6. linux centos6.4 php连接sql server2008
  7. httplib,urllib和urllib2
  8. java代码 分解EXCEL(一)
  9. 联通假4G欺骗消费者!
  10. Mybatis的mapper代理开发dao方法
  11. Python解析XML文件
  12. JavaScript(八)
  13. redis源码解析(1):redisObject对象说明
  14. LMerge-github
  15. ubuntu下安装和配置pycharm和pyqt5
  16. note 8 字符串
  17. 【转】MySQL常见错误代码及代码说明参考
  18. jenkins学习:jenkins+gitlab
  19. int和Integer的自动拆箱/装箱相关问题
  20. Git - 基础介绍

热门文章

  1. Prometheus 【目录】
  2. mac 终端高亮显示~
  3. 【BZOJ2190】【Luogu P2158】 [SDOI2008]仪仗队
  4. mac安装jupyter
  5. 【读一本书】《昇腾AI处理器架构与编程》--神经网络基础知识(2)
  6. 转:mysql 安装失败 start service执行不下去
  7. Chrome DevTools开发者工具调试
  8. [TimLinux] Python 再谈装饰器
  9. CodeForces985F -- Isomorphic Strings
  10. 基于iCamera App Kit 测试oV5640 500w分辨率 摄像头 总结