Java并发线程如何阻塞和唤醒?

售前免费咨询热线: 4 0 0 - 1 8 6 - 0 9 0 5
汇智资讯Huizhi information

当前位置:首页 »Java并发线程如何阻塞和唤醒?

Java并发线程如何阻塞和唤醒?

日期:2020-10-13 14:08:32 访问量: 来源:

Java并发线程的阻塞和唤醒可分几类:

1. synchronize

基于JVM的对象头来实现,多线程争抢同一个临界资源时根据不同的锁机制(自旋锁、轻/重量级锁)来进行阻塞和唤醒。

2. notify/wait,yeild等基础机制

这里暂时略过,大致实现原理是基于对象的同步队列和后面的AQS很像。

3. 并发组件的基础AQS

重点说下AQS(AbstractQueuedSynchronizer),

因为这是jdk并发包实现的基础(如Lock、BlockingQueue、CountdownLatch等)。

Aqs基本由一个volatile变量state和一个等待队列来实现,抢锁时先CAS修改state,失败以后就放到等待队列里,并通过LockSupport将线程挂起。

当锁的拥有者释放锁时会通过LockSupport唤醒等待队列的后续节点,让它再次去尝试抢锁(CAS修改state),如此反复。

掌握AQS的原理对理解jdk里很多并发组件非常有帮助。

汇聚行业精英智慧

致力于高端IT技术人才培养

助力万千学员成就IT梦!

汇智动力

扫码关注 领取资料

www.hzdledu.cn

相关阅读Reading

全国热线:400-186-0905

总部热线:028-6547-1147

周一至周日9:30-24:00

我要咨询
汇智动力微信

汇智动力微信公众号

')