public synchronized void addition()
{
//something;
}
和
public void addtion()
{
synchronized (//something)
{
//something;
}
}
之間的區別,如果我錯了,請忽略此問題。
public synchronized void addition()
{
//something;
}
和
public void addtion()
{
synchronized (//something)
{
//something;
}
}
之間的區別,如果我錯了,請忽略此問題。
它是第一個一次只能執行一個線程的方法,而在第二個線程中,只有一個線程可以執行該同步塊(如果不使用)這個作爲參數。
那麼這裏就是Is there an advantage to use a Synchronized Method instead of a Synchronized Block?
重複第二個不編譯。如果你的意思是
public void addition()
{
synchronized (this)
{
//something;
}
}
然後它們是等效的。
public synchronized void addition() {...}
相當於
public void addition() {
synchronized(this) { ... }
}
現在,如果你用不同的對象引用替換this
,鎖定會使用其他對象的監視器來完成。
如果第二個示例是synchronized (this)
,則沒有區別。如果是別的東西,那麼鎖定對象是不同的。
同步方法在「this」對象上同步。如果它是一個塊,你可以選擇任何對象作爲鎖。
public synchronized void addition()
{
//something;
}
是一樣的:
public void addtion()
{
synchronized (this)
{
//something;
}
}
然而,在你的第二個例子,你可能想使用的東西從this
不同的同步。
I)
public synchronized void addition()
{
//something;
}
II)
public void addtion()
{
synchronized (//something)
{
//something;
}
}
在版本I(method level synchronization
),在時間,方法的完整體只能由只有一個線程執行。
然而,版本II更靈活,因爲它被稱爲block level synchronization
,您可以在synchronized (//something)
之上添加一些行以並行執行它們。它應該是synchronized (this)
版本II應該是首選,因爲只有該代碼需要多線程(同步內),這是至關重要的。
可能[dupplicate](http://stackoverflow.com/questions/1149928/what-is-the-difference-between-a-synchronized-method-and-synchronized-block-in-j) – Artem 2011-12-15 11:56:04