什么是synchronized
synchronized是java中的关键字,也被称为同步锁,是一种非公平锁,是java中用来保证线程安全的,synchronized在Jdk1.6之前是重量级锁,性能很差,之后引入了偏向锁和轻量级锁,性能得到了很大的提升。
偏向锁:实际场景中大部分情况下只会有一个线程会去获取锁,在不存在锁竞争的情况下,锁对象会将当前线程的线程id存到对象头的中,当该线程再次去获取锁时,就不用有CAS加锁的过程,提高了性能。
轻量级锁:当有其他线程试图去获取锁的时候,偏向锁升级为轻量级锁。
重量级锁:当有多个线程同时去竞争锁的时候,轻量级锁升级为重量级锁。
锁只能升级,不能降级。
synchronized可以用来修饰什么
1.修饰实例方法:锁的是当前对象的实例;
2.修饰静态方法:锁的是当前类的.class对象;
3.修饰代码块: 锁的是()里面配置的对象。
synchronized的底层实现原理
通过monitorenter和monitorexit实现加锁和解锁
主要为了巩固基础,加深记忆,没有涉及过多深入的知识,欢迎讨论和提问。