一、作用在代码块上
synchronized作用在代码块上,this表示一定是线程共享的对象,每个对象都有一个对象锁,100个对象有100个锁,线程t1进来找到this的对象锁,并占有,t2则等待
比如:
this就表示Account对象act,act只有一个,act被t1,t2共享,共享就是只有一个锁,比如synchronized(“abd”),常量池只有一个abd
二、作用在实例方法上
synchronized出现在实例方法上,锁的是一定是this,不灵活,而且锁的是整个方法,会扩大同步范围
StringBuffer也是在方法上加了synchronized,
总结:局部变量不存在安全问题
三、静态方法使用
表示类锁,一个类只有一把锁,
100个对象也只有一把锁
以上的锁其实叫 :排他锁