允许一种方法在Java中锁定其父对象
Java中有没有办法让方法锁定(互斥)它所在的对象?
我知道这听起来令人困惑,但基本上我不想与这个C#代码片段相等,而是使用Java。
lock(this)
{
// Some code here...
}
我的任务是将以.Net编写的API重新实现为Java,并且我被要求保持Java版本与.Net版本类似于人类可能的版本。 这并不是因为.Net版本看起来像是从我无法访问的C ++版本转录而来的。
无论如何,上面的行出现在C#版本中,我需要一些在Java中做相同的事情。
这相当于:
synchronized (this)
{
}
(不,你一般不应该用C#或者Java来做,而应该锁定私有引用,而这些私有引用没有其他访问方式,当然你可能已经意识到了这一点 - 但我不想留下一个答案没有警告:)
假设C ++代码是一个简单的互斥锁,将“lock”替换为“synchronized”
synchronized (this)
{
// ...
}
以下是Java Concurrency教程的更多信息
我会推荐Brian Goetz的“实践中的Java并发性”。 这是一本很好的书。
保持同步块尽可能小可能是件好事。 在方法上使用synchronized修饰符是粗粒度的,有时是必需的,但除此之外,您可以使用另一个对象来执行该操作,从而使块更小。
喜欢这个:
public class PrivateLock {
private final Object myLock = new Object();
@GuardedBy("myLock") Widget widget;
void someMethod() {
synchronized (myLock) {
// Access or modify the state of widget
}
}
}
链接地址: http://www.djcxy.com/p/13317.html
上一篇: Allowing a method to lock its parent Object in Java
下一篇: In Java critical sections, what should I synchronize on?