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