使用同步方法而不是同步块是否有优势?

有人能举个例子告诉我synchronized方法优于synchronized块吗

有人能举个例子告诉我synchronized方法比synchronized块的优势吗?谢谢。

与块相比,使用同步方法没有明显的优势

也许唯一的一个(但我不会称之为优势)是您不需要包含对象引用this

方法:

public synchronized void method(){//从此处阻止“this”。。。。
...
...
...
}//到这里

区块:

公共无效方法(){
已同步(此){//从此处阻止“此”。。。。
....
....
....
}//到这里。。。
}

看到了吗?没有任何优势

确实比方法有优势,但主要是灵活性,因为可以使用另一个对象作为锁,而同步方法将锁定整个对象

比较:

//锁定整个对象
... 
私有同步的void someInputRelatedWork(){
... 
}
私有同步的void someOutputRelatedWork(){
... 
}

vs

//使用特定锁
Object inputLock=新对象();
Object outputLock=新对象();
私有无效输入相关工作(){
已同步(输入锁){
... 
} 
}
私有输出相关工作(){
已同步(输出锁){
... 
}
}

此外,如果方法增长,您仍然可以保持同步部分分离:

私有无效方法(){
…这里是代码
…这里是代码
…这里是代码
已同步(锁定){
…这里很少有代码行
}
…这里是代码
…这里是代码
…这里是代码
…这里是代码
}

发表评论