之间有什么区别
public synchronized void addition()
{
//something;
}
和
public void addtion()
{
synchronized (//something)
{
//something;
}
}
如果我错了,请忽略这个问题。
答案 0 :(得分:5)
public synchronized void addition() {...}
相当于
public void addition() {
synchronized(this) { ... }
}
现在,如果用另一个对象引用替换this
,则将使用该另一个对象的监视器完成锁定。
答案 1 :(得分:2)
第二个没有编译。如果你的意思是
public void addition()
{
synchronized (this)
{
//something;
}
}
然后他们就等同了。
答案 2 :(得分:2)
如果第二个例子是synchronized (this)
,那么没有区别。如果它是其他东西,那么锁定对象是不同的。
答案 3 :(得分:2)
public synchronized void addition()
{
//something;
}
与:
相同public void addtion()
{
synchronized (this)
{
//something;
}
}
然而,在第二个示例中,您可能希望使用与this
不同的内容进行同步。
答案 4 :(得分:1)
第一个只有一个线程可以一次执行整个方法,而在第二个线程中,只有一个线程可以执行该同步块,如果没有使用这个作为参数。
这里是它的副本Is there an advantage to use a Synchronized Method instead of a Synchronized Block?
答案 5 :(得分:0)
同步方法在“this”对象上同步。如果它是一个块,你可以选择任何对象作为锁。
答案 6 :(得分:0)
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应该是首选,因为只有代码需要多线程(在同步中)才是关键。