谁能用一个例子告诉我synchronized方法比synchronized块的优点?
发布于 2009-02-22 03:36:20
谁能用一个例子告诉我synchronized方法相对于synchronized块的优点?谢谢。
与块相比,使用synchronized方法没有明显的优势。
也许唯一的一个(但我不认为这是一个优点)是您不需要包含对象引用this。
方法:
public synchronized void method() { // blocks "this" from here....
...
...
...
} // to here数据块:
public void method() {
synchronized( this ) { // blocks "this" from here ....
....
....
....
} // to here...
}看见?一点优势都没有。
然而,与方法相比,块do具有优势,主要是在灵活性方面,因为您可以使用另一个对象作为锁,而同步方法将锁定整个对象。
比较:
// 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
}发布于 2009-02-22 03:26:34
唯一真正的区别是,同步的块可以选择在哪个对象上进行同步。同步方法只能使用'this' (或同步类方法的相应类实例)。例如,它们在语义上是等价的:
synchronized void foo() {
...
}
void foo() {
synchronized (this) {
...
}
}后者更灵活,因为它可以竞争任何对象的相关锁,通常是成员变量。它也更细粒度,因为您可以在代码块之前和之后执行并发代码,但仍然在方法中执行。当然,您也可以通过将并发代码重构为单独的非同步方法来轻松地使用synchronized方法。使用任何使代码更容易理解的代码。
发布于 2009-02-22 07:31:19
同步方法
优点:
缺点:
同步块
优点:
缺点:
就我个人而言,我更喜欢使用同步方法,其中的类只专注于需要同步的东西。这样的类应该尽可能小,因此应该很容易检查同步。其他人不应该关心同步。
https://stackoverflow.com/questions/574240
复制相似问题