java线程阻塞怎么解决 Java并发线程如何阻塞和唤醒?
浏览量:1353
时间:2021-03-20 13:37:52
作者:admin
Java并发线程如何阻塞和唤醒?
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里很多并发组件非常有帮助。
java线程阻塞怎么解决 怎么唤醒一个阻塞的线程 java线程
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。
上一篇
造纸业公司网站 造纸业股票
下一篇
甜品网站网页设计素材 网页设计