使用同步方法而不是同步块有什么优点吗?
有人能告诉我使用同步方法比使用同步块的优势并附带一个例子吗?谢谢。
使用同步方法与同步块没有明显的优势。
也许唯一的优势(但我不会称之为优势)是您不需要包括对象引用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() { ... }
与:
// Using specific locks Object 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 }