面试:平常工作使用synchronized 关键。
什么场景下会出现锁升级呢?
锁升级主要发生在以下场景:
锁优化:在Java的早期版本中,synchronized关键字对整个对象进行加锁,这可能导致性能下降。为了优化性能,JVM引入了锁升级技术,将细粒度锁升级为更粗粒度的锁。
自适应锁升级:JVM还提供了自适应锁升级机制。当某个对象的同步块或方法被多个线程频繁访问时,JVM会根据统计信息判断是否将细粒度的锁升级为更粗粒度的锁,以提高性能。
锁粗化:当一段代码中存在连续的加锁解锁操作时,JVM可以将这些细粒度的加锁解锁操作合并为一个更粗粒度的锁操作,以减少锁操作的开销。这就是锁粗化。
锁升级可以提高程序的性能,减少锁操作的开销,但也可能带来一些潜在的问题。例如,如果多个线程在争用同一个粗粒度的锁时,可能会导致性能下降。因此,在使用锁升级时需要谨慎评估场景,并做出合适的优化决策。
不知道你这个问题是否已经解决, 如果还没有解决的话:synchronized是解决线程安全的问题,常用在 同步普通方法、静态方法、代码块 中
非公平、可重入
每个对象有一个锁和一个等待队列,锁只能被一个线程持有,其他需要锁的线程需要阻塞等待。锁被释放后,对象会从队列中取出一个并唤醒,唤醒哪个线程是不确定的,不保证公平性
两种形式: