美文网首页爱编程,爱生活
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