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