【Lock】
Lock lock = new ReentrantLock();
lock.lock()就是持有了对象监视器 其他线程只有等待锁的释放。
在使用notify()/notifyAll()方法进行通知时,被通知的线程是由JVM随机选择的,但是使用了
ReentrantLock结合Condition类是可以实现"选择性通知"的, 在Condition类中是默认提供的。
而synchronized就相当于Lock对象中的单一Condition对象,所有的线程都注册在它一个对象的身上
线程开始notifyAll()时,需要通知所有的waiting的线程 没有选择权 会出现相当大的效率问题。
在调用condition.await()方法之前需要调用lock.lock()方法.否则会出现IllegalMonitorStateException
Object.wait相当于Condition.await方法 Object.notify相当于Condition.signal/signalAll()方法
如果想单独唤醒部分线程,就需要使用多个Condition对象,也就是Condition对象可以唤醒部分指定线程,有助于
提升程序的运行效率。可以先对线程进行分组,然后唤醒指定组中的线程。
公平锁与非公平锁 ReentrantLock(true/false)的区别是 公平锁是先来的先得到锁。
getHoldCount()获得lock的数量。
getQueueLength()的作用是返回证等待获取此锁定线程估计数.
int getWaitQueueLength(Condition condition)的所用是返回等待与此锁定相关条件Condition线程估计数量。
boolean hasQyeyedThread(Thread thread)的作用是查询指定的线程是否正在等待获取此锁定。
boolean hasWaiters(Condition condition)作用是查询是否有线程正在等待与此锁定的condition条件.
boolean isFair判断是不是公平锁。
boolean isHeldByCurrentThread() 查询当前线程是否保持此锁定.
boolean isLocked() 查询此锁是否由任意线程保持。
boolean tryLock(long timeout, TimeUnit unit)作用是如果锁定在给定等待时间内没有被另外一个线程保持,
且当前线程不中断,则获取该锁定。
awaitUntil(Date) Date之前可以被其他线程唤醒.
类ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行任务。这样虽然保证了安全 但是效率较低
所以提供了ReentrantReadWriteLock类使用它可以加快运行效率,在某些不需要操作的实例变量的方法中完全可以使用
Lock lock = new ReentrantLock();
lock.lock()就是持有了对象监视器 其他线程只有等待锁的释放。
在使用notify()/notifyAll()方法进行通知时,被通知的线程是由JVM随机选择的,但是使用了
ReentrantLock结合Condition类是可以实现"选择性通知"的, 在Condition类中是默认提供的。
而synchronized就相当于Lock对象中的单一Condition对象,所有的线程都注册在它一个对象的身上
线程开始notifyAll()时,需要通知所有的waiting的线程 没有选择权 会出现相当大的效率问题。
在调用condition.await()方法之前需要调用lock.lock()方法.否则会出现IllegalMonitorStateException
Object.wait相当于Condition.await方法 Object.notify相当于Condition.signal/signalAll()方法
如果想单独唤醒部分线程,就需要使用多个Condition对象,也就是Condition对象可以唤醒部分指定线程,有助于
提升程序的运行效率。可以先对线程进行分组,然后唤醒指定组中的线程。
公平锁与非公平锁 ReentrantLock(true/false)的区别是 公平锁是先来的先得到锁。
getHoldCount()获得lock的数量。
getQueueLength()的作用是返回证等待获取此锁定线程估计数.
int getWaitQueueLength(Condition condition)的所用是返回等待与此锁定相关条件Condition线程估计数量。
boolean hasQyeyedThread(Thread thread)的作用是查询指定的线程是否正在等待获取此锁定。
boolean hasWaiters(Condition condition)作用是查询是否有线程正在等待与此锁定的condition条件.
boolean isFair判断是不是公平锁。
boolean isHeldByCurrentThread() 查询当前线程是否保持此锁定.
boolean isLocked() 查询此锁是否由任意线程保持。
boolean tryLock(long timeout, TimeUnit unit)作用是如果锁定在给定等待时间内没有被另外一个线程保持,
且当前线程不中断,则获取该锁定。
awaitUntil(Date) Date之前可以被其他线程唤醒.
类ReentrantLock具有完全互斥排他的效果,即同一时间只有一个线程在执行任务。这样虽然保证了安全 但是效率较低
所以提供了ReentrantReadWriteLock类使用它可以加快运行效率,在某些不需要操作的实例变量的方法中完全可以使用
读写锁来加快代码的运行速度.
有不懂的加我微信 18221051908