Java并发--Lock对象的使用

ReentrantLock

  1. ReentrantLock类的lock()与unlock()结合Condition类的await()与signal()方法实现wait/notigy机制。
  2. 建立多个Condition可以实现唤醒部分线程。
  3. 公平锁: 采用先到先得的策略,每次获取锁之前都会检查队列里面有没有排队等待的线程,没有才会舱室获取锁,如果有就将当前线程追加到队列中。
  4. 非公平锁:采用“有机会插队”的策略,一个线程获取锁之前要先去尝试获取锁而不是在队列中等待,如果获取锁成功,则说明线程虽然是后启动的,但先获得了锁。
  5. Public int getHoldCount()方法的作用是查询“当前线程”保持此锁定的个数,即调用lock()方法的次数。
  6. public final int getQueueLength()方法的作用是返回正等待获取此锁的线程数。
  7. public int getWaitQueueLength(Condition)方法的作用是返回等待与此锁相关的给定条件的线程数。
  8. public final boolean hasQueuedTHread(Thread)方法的作用是查询指定的线程是否正在等待获取此锁,也就是判断参数中的线程是否在等待队列中。
  9. public final boolean hasQueuedThreads()方法的作用是查询是否有线程正在等待获取此锁,也就是等待队列中是否有等待的线程。
  10. public boolean hasWaiters(Condition)方法的作用是查询是否有线程正在等待与此锁有关的condition条件,也就是是否有线程执行了condition对象的await()方法而呈等待状态。
  11. public final boolean isFair()方法的作用是判断是不是公平锁。默认是公平锁
  12. public boolean isHeldByCurrentThread()方法的作用是查询当前线程是否保持此锁。
  13. public boolean isLocked()方法的作用是查询是否有任意线程保持,并没有释放。
  14. public void lockInterruptibly()方法的作用是当某个线程尝试获得锁并且阻塞在lockInterruptibly()方法时,该线程可以被中断。
  15. public boolean tryLock()方法的作用是嗅探拿锁,如果当前线程发现锁被其他线程持有了,则返回false,程序继续执行后面的代码,而不是呈阻塞等待锁的状态。
  16. public boolean tryLock(long,TimeUnit),若在指定时间内获得锁,返回true;
  17. public boolean awaitUnit(Date)方法的作用是在指定的Date结束等待。

ReentrantReadWriteLock类

  1. 读写锁有两个锁:一个是读操作相关的锁,也称为共享锁;另一个是写操作相关的锁,也称排它锁。读锁之间不互斥,读锁与写锁互斥,写锁与写锁互斥。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容