在块上使用同步方法没有明显的优势。
也许唯一的一个(但我不会称其为优势)是你不需要包括对象引用
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 locksObject inputLock = new Object();Object outputLock = new Object();private void someInputRelatedWork() { synchronized(inputLock) { ... } }private void someOutputRelatedWork() { synchronized(outputLock) { ... }}
同样,如果方法变大,你仍然可以将同步部分分开:
private void method() { ... pre here ... pre here ... pre here synchronized( lock ) { ... very few lines of pre here } ... pre here ... pre here ... pre here ... pre here}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)