显式锁ReentrantLock
来源:互联网 发布:哈工大人工智能产业园 编辑:程序博客网 时间:2024/05/19 13:59
使用:
1)普通上锁和释放锁:
lock.lock();try{}finally{lock.unlock();}
2)定时的轮询,如果指定时间没有得到锁的话就会放弃,例子中的线程就会提前结束:
public class TestTryLock {static AtomicInteger ii = new AtomicInteger(0);static int lockWaitTime = 1;static CyclicBarrier barrier = new CyclicBarrier(10000);static ReentrantLock lock = new ReentrantLock();public static void main(String[] args){for(int i = 0 ; i < 10000 ; i++){new Thread(new t1(lock, ii , barrier)).start();;}}static class t1 implements Runnable{ReentrantLock lock;AtomicInteger i;CyclicBarrier barrier;public t1(ReentrantLock lock,AtomicInteger i,CyclicBarrier barrier){this.lock = lock;this.i = i;this.barrier = barrier;}@Overridepublic void run() {try {barrier.await();} catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();} catch (BrokenBarrierException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}try {//这样总数不一定是10000了if(!lock.tryLock(lockWaitTime,TimeUnit.MILLISECONDS)){//指定时间没有获得所就会直接结束线程return;}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}try{System.out.println(i.incrementAndGet());}finally{lock.unlock();}}}}输出结果肯定不会有10000.
3)可中断锁的获取,获取锁的同时会监听中断的请求:
lock.lockInterruptibly();try{}finally{lock.unlock();}
和synchronized的比较:
1)灵活性:可以显式的释放锁,synchronized像一个定时炸弹,抛出异常,永远无法释放锁,释放锁还可以和异常有很好的交互。
2)简洁性:如果忘记unlock,那么是非常致命的,可能引起死锁。
3)伸缩性:线程越多,synchronized性能下降更厉害,侧面看出ReentrantLock的性能略优于内置锁。
0 0
- 显式锁ReentrantLock
- 显式锁Lock、ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock &&
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- ReentrantLock
- Hibernate-缓存
- Ubuntu14.04桥接网络设置与SSH登陆
- 苹果自带的json解析NSJSONSerialization(序列化)
- 小白笔记------------------最小m段和问题
- <<金刚经>> 读书小记
- 显式锁ReentrantLock
- Android学习心得(18) --- 对APK包动态写入信息
- 数组操作
- C/C++输出格式运用
- CentOS7+JDK1.7
- 欢迎使用CSDN-markdown编辑器
- uva1608 non-boring sequences
- matlab中lsim的用法
- 至今互联网上收集最全的精品教育资源【转载+补充】