并发编程学习笔记 二 park/unpark

park / unpark 原理

每个线程都有自己的一个 Parker 对象,由三部分组成 _counter , _cond 和 _mutex
(1)当线程调用 park 方法时,会检查 counter 是不是为 0 ,若为 0 ,则获得 mutex 互斥锁,进入 cond 条件变量等待。设置 counter=0 。若为 1 ,则不阻塞,只是置 counter 为 0。
(2)当线程调用 unpark 方法时,设置 counter 为 1,并唤醒 cond 条件变量中的线程,线程恢复运行,并置 counter 为 0。

java 线程状态之间的相互转换

  1. NEW --> RUNNABLE
    (1)调用线程的 start 方法。
  2. WAITING <–> RUNNABLE
    (1)wait / notify,当 notify 竞争失败后,会从 WAITING 变为 BLOCKED
    (2)join / join结束或interrupt
    (3)park / unpark 或interrupt
  3. BLOCKED <–> RUNNABLE
    (1)sychronized 等 锁竞争成功或失败
  4. RUNNABLE --> TERMINATED线程代码运行完了

死锁 活锁 饥饿

  1. 死锁的四个条件
    (1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LockSupport是Java并发包中的一个核心基础类,它提供了线程阻塞和唤醒的功能。在AQS框架中,它主要被用来实现线程的阻塞和唤醒,而Unsafe则提供了CAS操作,用于实现AQS的同步机制。因此,LockSupport和Unsafe这两个类都是AQS框架不可或缺的组成部分,两者配合使用,使得AQS能够高效地实现线程同步。 ### 回答2: LockSupport是Java并发编程中的一个核心基础类,主要提供了线程阻塞和唤醒的功能。 在AQS框架中,LockSupport被广泛应用于线程的阻塞与唤醒操作,是实现锁和同步器的重要组成部分。 首先,LockSupport提供了park()和unpark()两个方法,这两个方法可以实现线程的阻塞和唤醒操作。线程调用park()方法后会进入阻塞状态,直到其他线程调用unpark()方法唤醒该线程;而线程调用unpark()方法后,如果该线程已经被阻塞,会立即解除阻塞状态。通过这两个方法的灵活组合,能够很方便地实现线程的阻塞与唤醒。 其次,LockSupport内部使用了类似于信号量的机制,每个线程都会关联一个许可证。调用一次park()方法会消耗一个许可证,而调用一次unpark()方法会增加一个许可证。如果线程在调用park()方法前已经有了许可证,那么调用park()方法后不会阻塞,而是直接消耗掉这个许可证。这种在许可证上的管理,使得LockSupport能够实现更加灵活的线程阻塞和唤醒。 最后,LockSupport使用了底层的操作系统机制来实现线程的阻塞和唤醒,效率较高。相比于传统的等待-通知机制(wait-notify),LockSupport的实现更加简洁高效,并且不需要先获得对象的监视器,而是通过许可证的方式进行线程的阻塞和唤醒。 综上所述,LockSupport作为AQS框架的重要组成部分,提供了灵活、高效的线程阻塞和唤醒机制,是Java并发编程中不可或缺的核心基础类之一。 ### 回答3: LockSupport是Java并发编程中的核心基础类之一,它提供了线程阻塞和唤醒的功能,可以在任意线程中进行阻塞和唤醒操作。 首先,LockSupport类提供的park/unpark操作相比其他线程同步器,如synchronized关键字或者wait/notify机制,具有更高的灵活性和性能。它不依赖于任何特定的对象,而是直接与线程进行交互。这使得LockSupport可以用于更广泛的场景,例如线程间的通信、同步控制和中断处理等。 其次,LockSupport是AQS(AbstractQueuedSynchronizer)框架的关键组件之一。AQS框架提供了一种可重入的、高效的同步器实现方式,被广泛应用于Java并发编程中。而LockSupport作为AQS框架的辅助类,为其提供了底层的线程阻塞和唤醒的能力。 在AQS框架中,LockSupport的park/unpark方法被用于实现线程的阻塞和唤醒操作,实现了线程间的同步与互斥。它通过使用不可重入的同步状态来管理线程的阻塞和唤醒,避免了传统同步机制中存在的死锁和饥饿问题。 此外,LockSupport的park/unpark方法还可以与其他并发类库结合使用,如Future、CountDownLatch和Semaphore等。通过LockSupport类,我们可以实现更加灵活和高效的并发编程,提高系统的吞吐量和性能。 综上所述,LockSupport作为AQS框架的关键组件之一,不仅提供了线程阻塞和唤醒的功能,还具有较高的灵活性和性能。因此,LockSupport也被认为是Java并发编程中的核心基础类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值