
【Java 多线程】【Synchronized 原理&死锁】
比如:两个工人,只有一把锤子和钉子,一个人拿着锤,一个人拿着钉子,两人都需要对方持有的,但都不放下自己持有的,进入僵持状态;同一个线程,对同一把锁,加锁两次,可重入没有事,不可重入就会产生锁竞争,等待锁,自己竞争自己,自等待;存在锁竞争,尝试加锁状态,但不是真正的加锁,而是打上个偏向锁的标记,记录这个锁属于哪个线程。区分是否真正需要加锁,有其他的线程来打标记,JVM就会通知赶紧加上锁。锁竞争更加激烈,多条线程进入自旋,就会升级为重量级锁。延迟加锁,非必要,不加锁,避免加锁的开销。最有效解决死锁问题,就是。




























