重入锁
来源:互联网 发布:双十一淘宝客服回复 编辑:程序博客网 时间:2024/05/01 15:40
重入锁完全可以替代synchronized关键字
重入锁使用java.util.concurrent.locks.ReentrantLock类来实现,下面是一段简单的案例
简单示例
public class ReenterLock { static class Task implements Runnable{ static ReentrantLock lock = new ReentrantLock(); static int i = 0; @Override public void run() { for(int j = 0 ;j<1000;j++){ try{ lock.lock(); i++; }finally{ lock.unlock(); } } } } public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new Task()); Thread t2 = new Thread(new Task()); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println("i="+Task.i); }}
使用重入锁的一些注意事项:
* 开发人员必须在线程结束的时候手动释放锁(不管程序是否抛出异常),考虑到代码可能抛出运行时异常,所以应该将释放锁的代码写在finally{}块中
* 一个线程可以连续获得一把锁多次,但是要注意最后释放的时候也要释放相同的次数,如果释放的次数大于获取的次数,那么会抛出IllegalMonitorStateException异常,如果释放的次数少的话,那么就证明该线程还持有锁对象,此时别的线程就没有办法进入临界区
中断
阅读全文
0 0
- 重入锁
- 重入锁
- 重入锁
- 重入锁
- 重入锁
- 重入锁--ReentrantLock
- 重入锁--ReentrantLock
- 重入锁ReentrantLock
- 重入锁ReentrantLock
- 重入锁--ReentrantLock
- 重入锁 ReentrantReadWriteLock
- 重入锁--ReentrantLock
- ReentrantLock 重入锁
- 重入锁ReentrantLock
- ReentrantLock重入锁
- 重入锁--ReentrantLock
- 重入锁ReentrantLock
- 重入锁概念
- 心急的C小加
- C之有趣-螺旋方阵
- Ubuntu编译内核驱动模块
- Unity3D NGUI的使用
- MySql删除外键语法 测试思路
- 重入锁
- C++学习之库函数<algorithgm>(1)
- HDU 6038-Function
- [SDOI2009]HH去散步
- javaBean与Map相互转换工具
- ATM取款Final
- C++中的初始化
- C++温故笔记(三)
- Spring的七个事务传播行为