java synchronized 有两种用法?一种是方法上加synchronized ,还有一种是什么?
3个回答
展开全部
第一种用法就是你上面展示的方法,另一种方法是
synchronized(obj){//obj代表同步的时候要锁住独占的对象
//...要同步的部分代码
}
synchronized
void
getName(){
//......代码
}
等价于
void
getName(){
synchronized(this){
//......代码
}
}
所以后一种方法使用范围更广
同步就是如果一个线程使用一个对象的时候不允许另一个线程来用,就要把那个对象锁起来
通俗点讲,一个人用电话亭时把电话亭锁起来,其他人只能排队使用电话亭,这就是同步,不同步的话就会出现每个人冲上去抢电话亭用的状况
同步使用有两个关键的条件:一个是多线程,另一个是出现多线程共同调用一个对象的状况
synchronized(obj){//obj代表同步的时候要锁住独占的对象
//...要同步的部分代码
}
synchronized
void
getName(){
//......代码
}
等价于
void
getName(){
synchronized(this){
//......代码
}
}
所以后一种方法使用范围更广
同步就是如果一个线程使用一个对象的时候不允许另一个线程来用,就要把那个对象锁起来
通俗点讲,一个人用电话亭时把电话亭锁起来,其他人只能排队使用电话亭,这就是同步,不同步的话就会出现每个人冲上去抢电话亭用的状况
同步使用有两个关键的条件:一个是多线程,另一个是出现多线程共同调用一个对象的状况
展开全部
synchronized
语句块,可以方便的写在方法内的某段。用法:synchronized
(对象地址){
逻辑
}
synchronized
的意思就是
先获得对象地址的锁,那么就可以先执行那部分代码。执行完就放开锁其他线程就可以进来了。
synchronized
void
getName()这个代码表示
以this类实例为对象地址相当于synchronized
(this){}.
那么在多线程环境中。如果访问同一个类同一个实例的这个方法,就会被同步
语句块,可以方便的写在方法内的某段。用法:synchronized
(对象地址){
逻辑
}
synchronized
的意思就是
先获得对象地址的锁,那么就可以先执行那部分代码。执行完就放开锁其他线程就可以进来了。
synchronized
void
getName()这个代码表示
以this类实例为对象地址相当于synchronized
(this){}.
那么在多线程环境中。如果访问同一个类同一个实例的这个方法,就会被同步
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
synchronized
可以修饰方法
也可以修饰语句块
加了synchronized
以后
一个线程在调用该方法时其他线程是不能调用的
就相当于我进了一个房间把门插上了
其他人必须等我出来了才能进去
可以修饰方法
也可以修饰语句块
加了synchronized
以后
一个线程在调用该方法时其他线程是不能调用的
就相当于我进了一个房间把门插上了
其他人必须等我出来了才能进去
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询