java多线程-Lock对象的使用

使用ReentrantLock类


使用ReentrantLock实现同步

调用ReentrantLock对象的lock()方法获取锁,调用unlock()方法释放锁,这两个方法成对使用。


多代码块间具有同步性


await()方法的错误用法和更正

在调用condition.await()方法之前调用lock.lock()代码获得锁。


使用await()和signal()实现wait/notify机制


await()方法暂停线程运行的原理

unsafe.park(false,0L)运行后实现了wait等待的效果


通知部分线程

condition可以分组,使用不同的condition唤醒不同组的线程


公平锁与非公平锁

公平锁:先到先得,后到排队
非公平锁:线程先尝试获取锁,不管有没有线程排队,如果获取锁失败则去排队


public int getHoldCount()方法的使用

作用是查询“当前线程“保持此锁定的个数,即调用lock()方法的次数


public final int getQueueLength()方法的使用

作用是返回正在等待获取此锁的线程估计数


public int getWaitQueueLength(Condition condition) 方法的使用

作用是返回等待与此锁相关的给定条件Condition的线程估计数


public final boolean hasQueuedThread(Thread thread)方法的使用

作用是查询指定的线程是否正在等待获取此锁,也就是判断参数中的线程是否在等待队列中


public final boolean hasQueuedThreads()方法的使用

作用是查询是否有线程正在等待获取此锁,也就是等待队列中是否有等待的线程


public boolean hasWaiters(Condition condition)方法的使用

作用是查询是否有线程正在等待与此锁有关的condition条件,也就是是否有线程执行了condition对象中的await()方法而呈等待状态


public final boolean isFair()方法的使用

作用是判断是不是公平锁


public boolean isHeldByCurrentThread()方法的使用

作用是查询当前线程是否保持此锁


public boolean isLocked()方法的使用

作用是查询此锁是否由任意线程保持,并没有释放


public void lockInterruptibly()方法的使用

作用是当某个线程尝试获得锁并且阻塞在lockInterruptibly()方法时,该线程可以中断


public boolean tryLock()方法的使用

作用是嗅探拿锁,如果当前线程发现锁被其他线程持有了,则返回false,程序继续执行后面的代码,而不是呈阻塞等待锁的状态


public boolean await(long time, TimeUnit unit)方法的使用

作用是具有自动唤醒线程的功能


public long awaitNanos(long nanosTimeout)方法的使用

具有自动唤醒线程的功能,时间单位是纳秒


public boolean awaitUntil(Date deadline)方法的使用

作用是在指定的Date结束等待


public void awaitUnininterruptibly()方法的使用

作用是实现线程在等待的过程中,不允许被中断


使用ReentrantReadWriteLock类


ReentrantLock类的缺点

与ReentrantReadWriteLock类相比,ReentrantLock类的主要缺点是使用ReentrantLock对象时,所有的操作都同步,哪怕只对实例变量进行读取操作,这样会耗费大量的时间,降低运行效率


ReentrantReadWriteLock类的使用–读读共享

ReentrantReadWriteLock类的使用–写写互斥

ReentrantReadWriteLock类的使用–读写互斥

ReentrantReadWriteLock类的使用–写读互斥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值