有人能通过一个例子告诉我同步方法相对于同步块的优势吗?谢谢。
在块上使用同步方法没有明显的优势。
也许唯一的一个(但我不认为它是一个优势)是您不需要包含对象引用this.
方法:public synchronized void method() { // blocks "this" from here....
...
...
...} // to here
区块:public void method() {
synchronized( this ) { // blocks "this" from here ....
....
....
....
} // to here...}
看见?一点好处都没有。
砌块做但是,与方法相比,它具有优势,主要是在灵活性方面,因为您可以使用另一个对象作为锁,而同步则会锁定整个对象。
比较:// locks the whole object... private synchronized void someInputRelatedWork() {
... }private synchronized void someOutputRelatedWork() {
... }
v.V.// Using specific locksObject inputLock = new Object();Object outputLock = new Object();private void someInputRelatedWork() {
synchronized(inputLock) {
...
} }private void someOutputRelatedWork() {
synchronized(outputLock) {
...
}}
此外,如果方法增长,仍然可以将同步部分分开:private void method() {
... code here ... code here ... code here synchronized( lock ) {
... very few lines of code here }
... code here ... code here ... code here ... code here}