java.util.concurrent包之Lock
来源:互联网 发布:linux locale c 编辑:程序博客网 时间:2024/05/22 00:33
在java5.0以前都是采用synchronized关键字进行同步控制,所有对象都自动含有单一的锁,JVM负责跟踪对象被加锁的次数。如果一个对象被解锁,其计数变为0。在任务(线程)第一次给对象加锁的时候,计数变为1。每当这个相同的任务(线程)在此对象上获得锁时,计数会递增。只有首先获得锁的任务(线程)才能继续获取该对象上的多个锁。每当任务离开一个synchronized方法,计数递减,当计数为0的时候,锁被完全释放,此时别的任务就可以使用此资源。由于这些锁是由JVM来控制,因此也叫隐式锁。
一个是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通过分离读锁和写锁,提供可共享的读锁提高读并发性能。
- java.util.concurrent包之Lock
- Lock - java-util-concurrent
- java.util.concurrent包(1)-lock和synchronized对比
- java.util.concurrent.locks.Lock
- java.util.concurrent.locks.Lock
- java.util.concurrent包
- java.util.concurrent包
- java.util.concurrent包
- java.util.concurrent包
- Java多线程工具包java.util.concurrent---Lock
- concurrent包:java.util.concurrent.atomic
- JAVA concurrent包学习--lock
- java.util.concurrent包探秘
- Java.Util.concurrent包学习
- java.util.concurrent.locks包
- java.util.concurrent.locks lock锁【2】
- Java并发编程之java.util.concurrent包UML结构
- 驯服tiger之四java.util.concurrent包
- MySQL修改root密码,使用DB Designer4 导出数据库表结构
- 完数:一个数如果等于它的各个因子之和,则这个数称之为完数
- 连续最大积
- Strategy模式
- VB控制结构
- java.util.concurrent包之Lock
- “菜鸟”程序员和“大神”程序员差距在哪里
- opencv之级联分类器训练opencv_haartraining
- 物联网
- IBatis源码分析
- 队列相关操作
- XP设置环境变量的一点疑惑
- powershell 按原始大小导出excel中的图片
- RMAN-06059: 没有找到预期的归档日志 --解决办法