本文主要介绍synchronized同步方法
1、方法内部的变量为线程安全
方法内部的私有变量为线程安全的
2、实例变量非线程安全
如果多个线程共同访问1个对象的实例变量,则有可能出现非线程安全的问题。这时候只要在类中访问实例变量的方法前面加上关键字synchronized
即可解决问题
3、多个对象多个锁
哪个线程先执行带有synchronized
的方法,哪个线程就持有该方法所属对象的Lock,那么其他线程就只能处于等待状态。但是如果多个线程访问多个对象,则JVM会创建多个锁
4、synchronized方法与锁对象
A线程先持有object对象的Lock锁,B线程可以以异步的方式调用object对象中的非synchronized类型的方法
A线程先持有object对象的Lock锁,B线程如果在这个时候调用object对象中的synchronized类型的方法则需要等待,也就是同步
5、脏读
发生脏读的情况是在读取变量的时候,此值已经被其他的线程更改过了,使用synchronized同步解决
6、synchronized锁重入
当一个线程得到一个对象锁后,再次请求此对象锁时是可以再次得到该对象的锁,也证明了在一个synchronized方法/块的内部调用本类的其他synchronized方法/块时,是永远可以得到锁的
可重入锁也支持在父子类继承环境中,当存在父子类继承关系时,子类是完全可以通过“可重入锁”调用父类的同步方法的
7、出现异常,锁自动释放
8、同步不具备继承性
看一看来瞧一瞧,这个博客真是好!
@益群网
好在哪里