Public Class A
{
private Object memberlockObject = new Object();
public doStuffapproach1(){
synchronized(this){
// Do something;
}
}
public doStuffapproach2(){
synchronized(memberlockObject){
// Do something;
}
}
public doStuffapproach3(Object parameterLockObject){
synchronized(parameterLockObject){
// Do something;
}
}
}在上面的代码中,doStuffapproach1、doStuffapproach2、doStuffapproach3方法是否实现了相同类型的块同步。如果不是,它们之间有何不同。应该在什么情况下使用它们?
附言:我理解方法级同步和在(this)上同步整个方法体一样好。
发布于 2016-06-14 15:14:36
使用synchronized关键字时,需要定义一个用作监视器的对象。
synchronized(this)使用当前对象作为监视器
synchronized(otherObject)使用另一个对象作为监视器
如果您需要在不同类中的同一对象上进行同步,那么至少其中一个需要在this之外的其他对象上进行同步。
请注意,隐式地将一个方法定义为synchronized将在this上同步(如果该方法不是static)。
doStuffapproach1方法在此基础上进行同步,因此对同一对象上方法的任何调用都将同步。
doStuffapproach2的工作方式与doStuffapproach1完全相同,因为您可以锁定在当前对象中具有唯一实例的对象。
doStuffapproach3的工作方式有所不同,因为您传递的是监视器,并且依赖于您作为参数传递的内容。
https://stackoverflow.com/questions/37805284
复制相似问题