概要
理解Java中的synchronized关键字。
目标
理解synchronized的含义及原理
理解synchronized的基本规则
明确synchronized关键字修饰普通方法、静态方法和代码块时锁对象的差异。
实现
一、synchronized含义
Java多线程中的同步机制会对资源进行加锁,保证同一时间内只有一个线程可以操作对应资源,避免多线程访问相同资源发生冲突。
synchronized是一种同步锁,可以实现同步机制。
二、synchronized基本规则
1、线程访问对象中的synchronized方法或代码块,其他线程访问该对象的synchronized方法或代码块将被堵塞;
2、线程访问对象中的synchronized方法或代码块,其他线程能正常访问该对象的非同步代码块;
3、线程访问对象中的synchronized方法或代码块,其他线程访问该对象的其他synchronized方法或代码块将阻塞。
三、synchronized修饰对象差异性对比
1、修饰普通方法
一个对象中的枷锁方法只允许一个线程访问。需要注意的是,这种情况下锁的是访问该方法的实例对象,如果多个线程不同对象访问该方法,则无法保证同步
2、修饰静态方法
由于静态方法是类方法,所以这种情况下锁的是包含这个方法的类,也就是类对象;这样如果多个线程不同对象访问该静态方法,也是可以保证同步的。
3、修饰代码块
普通代码块,如Synchronized(obj) 这里的obj可以为类中的一个属性,也可以是当前的对象,它的同步效果跟修饰普通方法一样;
Synchronized(obj.class)静态代码块,它的同步效果跟修饰静态方法类似。
初步学习中,没能做到深入研究。