补充一下同步锁中几种锁的升级过程:
在对资源(对象)进行上锁时,涉及到对象头信息的修改,这里简单介绍一下对象头中关于锁的部分——当前上锁的线程id,无锁状态、偏向锁标记,轻量锁标记,重量锁标记。
当一个线程对资源进行上锁时,对象处于无锁状态,这时通过cas修改对象头,并将当前线程id放入对象头,这就是偏向锁,如果一直没有线程对这个资源竞争,那么这个偏向锁会一直保持,不会主动释放,随后当有线程与当前线程进行资源抢占时,首先查看当前线程是否还存活并且持有锁,如果持有,则撤销偏向锁,升级为轻量级锁,如果没有,则将对象头先调整为无锁状态,再加偏向锁。在轻量级锁的情况下,有线程还是在与当前持有锁的线程进行抢占资源并且不断自旋,当自旋达到一定次数的时候,轻量级锁便会升级成重量锁,并且将所有抢占该资源且没有获得锁的线程全部放入等待队列。
高并发多线程总结1.多线程基本概念 首先,我们要理解多线程编程,必须清楚几个基本概念:进程——进程是操作系统层面的概念,它是操作系统进行资源分配和调度的基本单位线程——线程是进程内部的程序流...