Java多线程--Lock的使用
来源:互联网 发布:费玉清 爱情买卖知乎 编辑:程序博客网 时间:2024/05/03 15:23
使用ReentrantLock类
Lock和synchronized机制的主要区别:
1 synchronized机制提供了对与每个对象相关的隐式监视器锁的访问, 并强制所有锁获取和释放均要出现在一个块结构中, 当获取了多个锁时, 它们必须以相反的顺序释放. synchronized机制对锁的释放是隐式的, 只要线程运行的代码超出了synchronized语句块范围, 锁就会被释放.
2 Lock机制必须显式的调用Lock对象的unlock()方法才能释放锁, 这为获取锁和释放锁不出现在同一个块结构中,以及以更自由的顺序释放锁提供了可能.
1 公平锁与非公平锁
- 公平锁:表示线程获取锁的顺序是按照线程加锁的顺序来分配的,即先进先出的顺序
- 非公平锁:一种获取锁的抢占机制,是随机获得锁的
// 通过参数设定锁是否为公平锁/** * Creates an instance of {@code ReentrantLock} with the * given fairness policy. * * @param fair {@code true} if this lock should use a fair ordering policy */public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync();}
2 方法getHoldCount()、getQueueLength()和getWaitQueueLength(Condition condition)的使用
- getHoldCount():查询当前线程保持此锁定的个数,也就是调用lock()方法的次数
- getQueueLength():返回正等待此锁定的线程估计数
- 个体WaitQueueLength():返回等待与此锁定相关的给定条件Condition的估计数
3 方法hasQueueThread()、hasQueueThreads()和hasWaiters()的使用
- hasQueueThread(Thread thread):查询指定线程是否正在等待获取此线程
- hasQueueThreads():查询是否有线程正在等待获取此线程
- hasWaiters(Condition condition):查询是否有线程正在等待以此锁定有关的condition条件
4 方法isFair()、isHeldByCurrentThread()和isLocked()的使用
- isFair():判断是否是公平锁 (默认情况下,ReentrantLock是非公平锁)
- isHeldByCurrentThread():查询当前线程是否保持此锁定
- isLocked():查询此锁定是否由任意线程保持
5 方法lockInterruptibly()、tryLock()和tryLock(long timeout, TimeUnit unit)的使用
- lockInterruptibly():如果当前线程未被中断,则获取锁;如果已经锁定则抛出异常
- tryLock():查询当前线程是否保持此锁定
- isLocked():查询此锁定是否由任意线程保持
使用ReentrantReadWriteLock
读写锁表示也有两个锁:一个读操作相关的锁,也称为共享锁;另一个写操作相关的锁,也称为排它锁。
多个读锁之间不互斥,读锁与写锁互斥,写锁与写锁互斥
- 读读共享
- 写写互斥
- 读写互斥
- 写读互斥
0 0
- Lock的使用 java多线程
- Java多线程--Lock的使用
- java多线程Lock的使用。
- Java多线程之Lock的使用
- Java多线程之Lock的使用
- JAVA多线程之Lock的使用
- Java多线程之Lock的使用
- Java学习--多线程之Lock的使用
- Java多线程之Lock的使用
- Java多线程之Lock的使用
- Java多线程之Lock的使用
- Java多线程之Lock的使用
- java多线程之Lock类的使用
- Java 多线程之 Lock 的使用
- Java多线程之Lock的使用
- Java多线程之Lock的使用
- Java多线程之Lock的使用
- Java多线程核心技术(四):Lock的使用
- 好的博文记录
- POJ 3683 Priest John's Busiest Day (2-SAT)
- hdu 5924 Mr. Frog’s Problem
- 优先队列 与 堆
- 在CSDN博客中插入公式和图片
- Java多线程--Lock的使用
- 图解HTTP
- python的正则提取技巧
- linux中多线程编程的简单示例
- linux的混杂设备驱动
- VmWare下ubuntu进入root账户
- 2.hbase集群搭建
- java 版冒泡排序
- Java多线程--Timer