java.util.concurrent包之Lock
2013-05-25 19:24
344 查看
在java5.0以前都是采用synchronized关键字进行同步控制,所有对象都自动含有单一的锁,JVM负责跟踪对象被加锁的次数。如果一个对象被解锁,其计数变为0。在任务(线程)第一次给对象加锁的时候,计数变为1。每当这个相同的任务(线程)在此对象上获得锁时,计数会递增。只有首先获得锁的任务(线程)才能继续获取该对象上的多个锁。每当任务离开一个synchronized方法,计数递减,当计数为0的时候,锁被完全释放,此时别的任务就可以使用此资源。由于这些锁是由JVM来控制,因此也叫隐式锁。
在jdk5.0以后,提供了显示锁,即Lock,可以说是对隐式锁的功能的扩展,主要有两个:
一个是ReentrantLock,另一个是ReentrantReadWriteLock,前者是普通重入锁,后者是可重入的读写锁。这些锁提供了两种
锁竞争机制:公平竞争和非公平竞争,公平竞争的实现实际上是采用一个队列保存等待的线程,当当前线程释放锁之后,取出队头的线程唤醒,使之可以获取锁。
java中Lock接口的定义:
Lock与synchronized的区别:
1. synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁。而Lock的释放必须由程序自己保证,常用的写法是把是把释放锁的代码写到try{}finally中,在finally块中释放锁。
2. 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
如果使用Lock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情。
3.synchronize实际上是ReentrantLock和Condition的组合的简化版
4.相对于synchonized独占锁,ReentrantReadWriteLock通过分离读锁和写锁,提供可共享的读锁提高读并发性能。
在jdk5.0以后,提供了显示锁,即Lock,可以说是对隐式锁的功能的扩展,主要有两个:
一个是ReentrantLock,另一个是ReentrantReadWriteLock,前者是普通重入锁,后者是可重入的读写锁。这些锁提供了两种
锁竞争机制:公平竞争和非公平竞争,公平竞争的实现实际上是采用一个队列保存等待的线程,当当前线程释放锁之后,取出队头的线程唤醒,使之可以获取锁。
java中Lock接口的定义:
public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException; void unlock(); Condition newCondition(); }
Lock与synchronized的区别:
1. synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁。而Lock的释放必须由程序自己保证,常用的写法是把是把释放锁的代码写到try{}finally中,在finally块中释放锁。
2. 如果使用 synchronized ,如果A不释放,B将一直等下去,不能被中断
如果使用Lock,如果A不释放,可以使B在等待了足够长的时间以后,中断等待,而干别的事情。
3.synchronize实际上是ReentrantLock和Condition的组合的简化版
4.相对于synchonized独占锁,ReentrantReadWriteLock通过分离读锁和写锁,提供可共享的读锁提高读并发性能。
相关文章推荐
- synchronized 和java.util.concurrent.locks.Lock 的异同
- 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同 ?
- synchronized和java.util.concurrent.locks.Lock的异同?
- synchronized和java.util.concurrent.locks.Lock的异同
- 简述synchronized和java.util.concurrent.locks.Lock的异同_JAVA
- 简述synchronized和java.util.concurrent.locks.Lock的异同?
- 对比synchronized与java.util.concurrent.locks.Lock 的异同
- 对比synchronized与java.util.concurrent.locks.Lock 的异同
- synchronized和java.util.concurrent.locks.Lock的异同
- java.util.concurrent源码分析(三)ReentrantLock实现
- Synchronized和java.util.concurrent.locks.Lock的区别
- synchronized和java.util.concurrent.locks.Lock的区别
- java.util.concurrent.locks.Lock
- java.util.concurrent.locks.ReentrantLock重入锁源码解析
- 深入Synchronized和java.util.concurrent.locks.Lock的区别详解
- java.util.concurrent.locks.ReentrantLock
- 面试题-简述synchronized和java.util.concurrent.locks.Lock的异同 ?
- 深入Synchronized和java.util.concurrent.locks.Lock的区别详解
- java.util.concurrent包(1)——lock和synchronized对比
- (面试题)synchronized 和 java.util.concurrent.locks.Lock 的异同