美文网首页爱编程,爱生活
java concurrent 之 Lock

java concurrent 之 Lock

作者: 熬夜的猫头鹰 | 来源:发表于2018-06-16 21:51 被阅读20次

    java concurrent 之 Lock

    java.util.concurrent.locks.Lock是一个线程同步机制,就像同步块一样。 然而,锁比同步块更灵活和更复杂。

    Demo

    Lock lock = new ReentrantLock();
    
    lock.lock();
    
    //critical section
    
    lock.unlock();
    
    

    首先创建一个锁。 那么它的lock()方法被调用。 现在锁定实例被锁定。 调用lock()的任何其他线程将被阻塞,直到锁定锁的线程调用unlock()。 最后,unlock()被调用,Lock现在被解锁,所以其他线程可以锁定它。

    锁和同步块之间的主要区别

    • 同步块不能保证有关等待进入线程的线程被授予访问权限的顺序。
    • 您不能将任何参数传递给同步块的条目。 因此,尝试访问同步块的超时是不可能的。
    • 同步块必须完全包含在单个方法中。 Lock可以在单独的方法中调用lock()和unlock()。

    方法列表

    • lock()

    • lockInterruptibly()

    • tryLock()

    • tryLock(long timeout, TimeUnit timeUnit)

    • unlock()

    • 如果可能,lock()方法锁定Lock实例。 如果锁定实例已被锁定,线程调用lock()将被锁定,直到锁定解除锁定。

    • lockInterruptibly()方法锁定,除非调用该方法的线程已被中断。 另外,如果一个线程被阻塞等待锁定通过这个方法,并且它被中断,它退出这个方法调用。

    • tryLock()方法会尝试立即锁定Lock实例。 如果锁定成功,则返回true,如果Lock已锁定,则返回false。 这种方法从不阻止。

    • tryLock(long timeout,TimeUnit timeUnit)类似于tryLock()方法,除了在放弃尝试锁定锁之前等待给定的超时时间。

    • unlock()方法解锁Lock实例。 通常,Lock实现只允许锁定Lock的线程调用此方法。 调用此方法的其他线程可能会导致未检查的异常(RuntimeException)。

    相关文章

      网友评论

        本文标题:java concurrent 之 Lock

        本文链接:https://www.haomeiwen.com/subject/jcxieftx.html