其他分享
首页 > 其他分享> > Lock和syncronized

Lock和syncronized

作者:互联网

ReentrantLock是可重入锁(获取多少次锁就要释放多少锁) 公平/非公平都可以

synchronized 可重入 非公平:
锁机制实现原理:
配合常量池中的ACC_SYNCHRONIZED标识位 通过竞争监视器或者说管程monitor(两个原语monitorenter monitorexit 同一个时刻,只有一个 进程/线程能进入monitor中定义的临界区——》 monitor 能够达到互斥的效果)来实现锁同步

非公平锁实现原理:
虽然synchronized是悲观锁 但是非公平实现原理在于在进入线程队列前进行CAS,所以新启动的线程可能可以优先获得:
顺便说下锁升级:
无锁 -----》偏向锁—》轻量级锁-----》再到重量级锁(涉及锁升级 所以在已经知道同步代码块竞争激烈的时候 可以直接用重量级锁 防止锁机制转换带来的开销~)

ReentrantReadWriteLock:
读写锁:允许同一时刻被多个读线程访问,但是当有写线程访问时就阻塞所有读写线程


可重入通过jvm 记下锁的持有线程和计数器进行实现

可通过逃逸分析变对象堆分配为栈分配 也降低锁竞争问题(因为栈中不同步就不需要锁)

javHao 发布了63 篇原创文章 · 获赞 44 · 访问量 6222 私信 关注

标签:重入,monitor,synchronized,实现,Lock,线程,公平,syncronized
来源: https://blog.csdn.net/weixin_40695328/article/details/104069459