公平锁,非公平锁
公平锁:先来后到
非公平锁:谁牛逼谁先拿
乐观锁,悲观锁
悲观锁: 看你不爽,我就锁你
乐观锁:采用版本号和时间戳 来实现
读写锁:读允许多个线程。写一个线程并且不允许读线程
排他锁:同时只能有一个线程获得锁,例如 synchronized
可重入锁:自己锁住了,自己还能再次获得自己的锁
非重入锁:自己锁住了,不能获得自己的锁
java会涉及到锁的升级(为了节约从用户态变成核心态消耗的开销)
一开始无锁 启动 6秒在上偏向锁,把当前threadID写入对象的64bit的makeworl里面
又来了线程-》判断threadID是不是一致
没有:上偏向说 一致:不变 不一致:升级轻量级锁
把makeworld复制一份到线程栈,然后获得轻量级锁。
谁先复制完成就谁先强到。
后面来的 就自旋 cas 空转 等待获取锁,假如自旋次数过了某个阈值,或者等待线程数超过了核心数二分之一
升级重量级锁