这是一道面试题
- Synchronized 介绍
- monitor Object 设计模式
- Monitor(java多线程同步机制)
- Refer
synchronized介绍
synchronized关键字通过修饰一个方法或声明一个代码块,从而产生一个同步对象锁以及对应的同步代码块。
每当有线程要对该同步代码块进行访问时,线程就会首先尝试去获取该对象锁,并在成功获取到对象锁后,对该同步代码块进行正常访问,在同步代码块访问过程中,线程会一直持有该对象锁直到同步代码块访问完毕才会释放。
在上述线程持有同步锁并进行同步代码块访问过程中,其它线程将无法获得该对象锁,也无法访问该同步代码,这些线程都会被阻塞直到上述线程访问完毕。syschronized关键字,通过以上措施,确保每次只有一个线程能持有对象锁并对同步代码块进行访问,并在访问结束之前,不会有其它线程对其进行访问。
也就说,即使同步代码块在执行过程中遭遇线程调度,其它线程也无法访问该同步代码块,直到该线程被重新调度并完成同步代码块的访问并释放对象锁。
这样就保证了线程对同步代码块访问的连续性不受线程调度而中断。
synchronized被称为重量级的锁,它的同步包括:
- 对于普通方法同步,锁是当前实例对象
- 对于静态方法同步,锁是当前类的 Class 对象
- 对于方法块同步,锁是 Synchronized 括号里的对象
上述都是对象级别的锁