Synchronized :锁住的是对象,出现synchronized表示随后的代码块要用到共享数据了,要锁住了。
一、3种形式。
1、synchronized(obj):可以任意指定对象.
2、synchronized(this):当前对象:当一个类加到内存时,常量池有一个地址直接指向当前正在执行的对象.
3、public synchronized void run():当前对象(this),这是实例方法,每一方法里存着一个This.方法
对象:可以是普通类 public class Test {}, 也可以是干活线程类 ,只要是new 类名 的所有对象。
**所以synchronized(this){} 和synchronized 方法差不多,反正是锁当前对象。
二、对于锁类其实也一样,因为一个类入内存后,还是java.lang.Class 的类对象。所以还是锁对象。
三、锁的数据:一个类成员数据:对象实例变量,类变量
1、object instance variables:对象实例变量,存在堆中。
2、class variables:类变量,存在method area。
如果您正在写一个变量,这个变量有可能随后被另一个线程读,
或您正在读一个变量,这个变量有可能随后被另一个线程写,
这时你必须用到变量的地方放一个synchronized,
四、例子
1、简单需求
例如:银行个人账户(对象):卡号,余额
如果一个小店主,顾客很多,如果都用微信付款的话,有可能同一时刻访问店主的银行个人账户的问题。