第一种用法就是你上面展示的方法,另一种方法是
synchronized(obj){//obj代表同步的时候要锁住独占的对象
//...要同步的部分代码
}
synchronized void getName(){
//......代码
}
等价于
void getName(){
synchronized(this){
//......代码
}
}
所以后一种方法使用范围更广
同步就是如果一个线程使用一个对象的时候不允许另一个线程来用,就要把那个对象锁起来
通俗点讲,一个人用电话亭时把电话亭锁起来,其他人只能排队使用电话亭,这就是同步,不同步的话就会出现每个人冲上去抢电话亭用的状况
同步使用有两个关键的条件:一个是多线程,另一个是出现多线程共同调用一个对象的状况
synchronized 语句块,可以方便的写在方法内的某段。用法:synchronized (对象地址){
逻辑
}
synchronized 的意思就是 先获得对象地址的锁,那么就可以先执行那部分代码。执行完就放开锁其他线程就可以进来了。
synchronized void getName()这个代码表示 以this类实例为对象地址相当于synchronized (this){}.
那么在多线程环境中。如果访问同一个类同一个实例的这个方法,就会被同步
synchronized 可以修饰方法 也可以修饰语句块
加了synchronized 以后 一个线程在调用该方法时其他线程是不能调用的 就相当于我进了一个房间把门插上了 其他人必须等我出来了才能进去