【发布时间】:2011-01-04 08:54:19
【问题描述】:
-
以下类在 Java 中是否等效?如果不是,为什么?
class Abc { private int c = 0;
} } class Def { private int c = 0; private final Object lock = new Object();public synchronized void add(int a) { c += a; } public synchronized void subtract(int a) { c -= a;
} }public void add(int a) { synchronized(lock) { c += a; } } public void subtract(int a) { synchronized(lock) { c -= a; } -
另外,在
Def中,使用this作为同步参数而不是lock会有什么问题?是以下问题吗?Def def = new Def() synchronized (def) { def.add(5); //originates deadlock? or is this allowed AS LONG //as all this happens in the same thread? } Java 中的同步语句是否与 C# 的锁定语句一样?如果不是,它们的区别是什么?如果是,为什么 C# 也不允许像 Java 允许的那样锁定方法?
-
所以我猜
synchronized (this)的问题可以用下面的例子来描述?class Xyz { private int c;
}public void add(int a) { synchronized(this) { c += a; } } public void subtract(int a) { synchronized(this) { c -= a; } } public void show666() { return 666; }Thread1 调用
xyz.add(0),同时Thread2 尝试调用xyz.show666()。 Thread2 必须等待 Thread1 以xyz.add(0)结束,尽管如此 它不需要任何与锁直接相关的信息。是这样吗?
【问题讨论】:
标签: c# java multithreading synchronized