JUC之LockSupport与Condition

JUC之LockSupport与Condition

文章目录

  • JUC之LockSupport与Condition
    • 一、LockSupport
    • 二、Condition
      • 1、等待队列处理
      • 2、同步队列处理
    • 三、Usage

一、LockSupport

  • park()

    • 阻塞当前线程
    • 调用unpark、或者中断该线程,唤醒
  • unpark()

    • 唤醒线程

    这个工具主要用于对线程进行一个阻塞、唤醒处理。

二、Condition

​ Condition是一套等待/通知方法的接口,其 实现是在AQS的ConditionObject中,主要的实现方式是采用:

  • 同步队列
  • 等待队列

1、等待队列处理

​ 如果调用锁的condition对象的await方法,那么该线程就会构造成节点进入等待队列。进入等待队列之后,唤醒该线程需要其它线程调用相同的contion上的signal方法,尝试唤醒,并且进入同步队列。

2、同步队列处理

​ 经过唤醒之后的线程就会进入同步队列,在同步队列中,执行获取锁的操作,与一般情况下线程获取同步状态的实现是一致的。

三、Usage

Condition c1=lock.newCondition();
Condition c2=lock.newCondition();
  • 一个锁可以有多个condition,这意味着一个锁可以有多个队列,包括同步、等待队列;这是Synchronized所不能够拥有的一个特性,他的wait、signal都是操作同一个队列。

你可能感兴趣的:(原创,java)