有人能举个例子告诉我synchronized方法优于synchronized块吗
有人能举个例子告诉我synchronized方法比synchronized块的优势吗?谢谢。
与块相比,使用同步方法没有明显的优势
也许唯一的一个(但我不会称之为优势)是您不需要包含对象引用this
方法:
public synchronized void method(){//从此处阻止“this”。。。。
...
...
...
}//到这里
区块:
公共无效方法(){
已同步(此){//从此处阻止“此”。。。。
....
....
....
}//到这里。。。
}
看到了吗?没有任何优势
块确实比方法有优势,但主要是灵活性,因为可以使用另一个对象作为锁,而同步方法将锁定整个对象
比较:
//锁定整个对象
...
私有同步的void someInputRelatedWork(){
...
}
私有同步的void someOutputRelatedWork(){
...
}
vs
//使用特定锁
Object inputLock=新对象();
Object outputLock=新对象();
私有无效输入相关工作(){
已同步(输入锁){
...
}
}
私有输出相关工作(){
已同步(输出锁){
...
}
}
此外,如果方法增长,您仍然可以保持同步部分分离:
私有无效方法(){
…这里是代码
…这里是代码
…这里是代码
已同步(锁定){
…这里很少有代码行
}
…这里是代码
…这里是代码
…这里是代码
…这里是代码
}