Java 使用同步方法而不是同步块是否有优势?
有谁能举例说明同步方法优于同步块的优势吗?
回答:
在块上使用同步方法没有明显的优势。
也许唯一的一个(但我不会称其为优势)是你不需要包括对象引用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() { ... code here
... code here
... code here
synchronized( lock ) {
... very few lines of code here
}
... code here
... code here
... code here
... code here
}
以上是 Java 使用同步方法而不是同步块是否有优势? 的全部内容, 来源链接: utcz.com/qa/406676.html