zoukankan      html  css  js  c++  java
  • Lock分析

     
      Lock接口是锁的实现,用来控制多个线程访问共享资源的方式,是在java 1.5的时候引入的,在此之前,只能通过synchronized的方式来取得对象的锁。
      synchronized中的锁是隐式获取释放的,而Lock中的锁需要显示的获取和释放,同时提供了可中断,超时获取等Synchronized不具备的特性。
      
      由于Synchronized中的是隐式的获取和释放锁,所以只能是先获取一个锁,然后释放该锁,但是在Lock的时候,却可以先获取一个锁,再获取另外一个锁,
      然后在释放掉前一个锁。
      
      同时,在Lock中还提供了一种条件锁的方式,通过newCondition()来获取一个条件锁。
     
      提供的主要方法:
      void lock():获取锁,调用该方法当前线程将会获取锁,当锁获得后,从该方法返回
     
      void lockInterruptibly() throws InterruptedException:可中断地获取锁,和lock()方法的不同之处在于该方法会响应中断,即在锁的获取中可以中断当前线程
     
      boolean tryLock() :尝试非阻塞的获取锁,调用该方法后立刻返回,如果能够获取则返回true,否则返回false
     
      boolean tryLock(Long time,TimeUnit unit) throws InterruptedException:超时的获取锁,只有在当前线程获得了锁、被中断、超时才会返回
     
      void unlock():释放锁。
     
      Condition newCondition():获取条件锁(等待通知组件),该组件和当前的锁绑定,当前线程只有获得了锁,才能调用该组件的wait()方法,而调用后,当前线程将释放锁。
     
     
      使用方式:
     Lock l = ...;
     l.lock();
     try {
       // access the resource protected by this lock
     } finally {
       l.unlock();
     }
     
     
     
     
     
     
     
  • 相关阅读:
    elasticsearch操作命令
    mysql-清除binlog日志命令
    TensorFlow 基础 (03)
    TensorFlow 基础 (02)
    TensorFlow 基础 (01)
    Python 基础练手 32 道
    Pandas 批量处理文本表
    Pandas 清除 Excel 特殊字符
    MNIST实例-Tensorflow 初体验
    字符串和文本 (02)
  • 原文地址:https://www.cnblogs.com/zerotomax/p/8966904.html
Copyright © 2011-2022 走看看