2013-07-27 139 views
0

我刚刚开始在Java中进行同步,并且我有一个小问题。Java中同步方法ans同步块

这是方法:

public synchronized void method() { 
    // ... do staff ... 
} 

等于:

public void method() { 
    synchronize(this) { 
     // ... do staff ... 
    } 
} 

PS

最近我看了关于Java 2个好confs(并从此我的问题是)video 1video 2。你有一些相关的视频(我对Java和Android编程感兴趣)。

+0

的http://计算器。com/questions/574240/synchronized-block-vs-synchronized-method –

+1

您需要参加一些会议,但这不是会议漏洞。 –

+0

(1)是的。 (2)你不需要任何视频来建立这个,只需要现有的文档。 (3)如果你认为你将要学习计算机视频编程,你会有另一种想法。 – EJP

回答

0

是的。另外这款:

public static synchronized void method() { 
} 

等同于:

public static void method() { 
    synchronized (EnclosingClass.class) { 
    } 
} 

关于影片,只需在YouTube的搜索 “Java同步”。

0
public void method() { 
    synchronize(this) { 
     // ... do staff ... 
    } 
} 

是语义上等同于

public synchronized void method() { 
    // ... do staff ... 
} 
0

是的。同步方法在该方法所属的实例上隐式同步。

0

方法

public synchronized void method() { // blocks "this" from here.... 
    ... 
    ... 
    ... 
} // to here 

public void method() { 
    synchronized(this) { // blocks "this" from here .... 
     .... 
     .... 
     .... 
    } /// to here... 
} 

块也有一些对方法的优点,最重要的灵活性的。唯一真正的区别是同步块可以选择它同步的对象。同步方法只能使用'this'(或者对应的类实例用于同步类方法)。

同步块更灵活,因为它可以竞争任何对象的关联锁,通常是成员变量。这也是更精细的,因为你可以在块之前和之后执行并发代码,但仍然在方法中。当然,通过将并发代码重构为单独的非同步方法,您可以轻松使用同步方法。使用任何一种方式使代码更易于理解。

Is there an advantage to use a Synchronized Method instead of a Synchronized Block?

+1

复制内容时请提及来源! – NINCOMPOOP

0

代码outside synchronized block可以同时通过multiple threds访问。

public void method(int b) { 
    a = b // not synchronized stuff 
    synchronize(this) { 
     // synchronized stuff 
    } 
} 

这将始终保持同步:

public synchronized void method() { 
    // synchronized stuff 
}