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 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

}

以上是 Java 使用同步方法而不是同步块是否有优势? 的全部内容, 来源链接: utcz.com/qa/406676.html

回到顶部