Java的线程是映射到操作系统的原生线程之上的,如果要阻塞或唤醒一个线程,都需要操作系统来帮忙完成,这就需要从用户态转换到核心态中,因此状态转换需要耗费很多的处理器时间。
总结:synchronized 是通过操作系统底层的 互斥信号量 实现的,由于会牵扯到用户态和内核态的转换,所以代价比较沉重。不过,虚拟机也会进行锁优化,如自旋锁、轻量级锁、偏向锁等。
Java的线程是映射到操作系统的原生线程之上的,如果要阻塞或唤醒一个线程,都需要操作系统来帮忙完成,这就需要从用户态转换到核心态中,因此状态转换需要耗费很多的处理器时间。
总结:synchronized 是通过操作系统底层的 互斥信号量 实现的,由于会牵扯到用户态和内核态的转换,所以代价比较沉重。不过,虚拟机也会进行锁优化,如自旋锁、轻量级锁、偏向锁等。