所以问题是,我希望能够和我的班级一起做这件事。
object.lockAccess(); object.doSomething(); object.doAnotherThing(); object.doAnotherThingYet(); object.unlockAccess();
因此其他线程在锁定时将无法访问我的类方法。 这是我做的实现,我想知道是否有人有更好的想法,或者它是否可能失败。
private boolean locked = false;
public void lockAccess() throws Exception
{
while(!tryToLock())
{
Thread.sleep(1000);
}
}
public void unlockAccess() throws Exception
{
while(!tryToUnlock())
{
Thread.sleep(1000);
}
}
private synchronized boolean tryToLock()
{
if(locked)
return false;
else
{
locked = true;
return true;
}
}
private synchronized boolean tryToUnlock()
{
if(locked)
return false;
else
{
locked = false;
return true;
}
}
答案 0 :(得分:4)
while(!tryToLock())
{
Thread.sleep(1000);
}
糟糕的主意。
使用java.util.concurrent中的Lock implementation。
或只是synchronized
阻止。
答案 1 :(得分:3)
根据你的意图,这样做会容易得多(因为你可以在Java中使用任何对象作为互斥体):
synchronized( object ) {
object.doSomething();
object.doAnotherThing();
object.doAnotherThingYet();
}
如果您需要更精细的控制,特别是tryLock,那么请查看“Lock”界面以及实现它的类。
答案 2 :(得分:3)
您的tryToUnlock()
方法不正确,但在技术上可行。
大多数Java程序员会做更多这样的事情,但是:
synchronized (object) {
object.doSomething();
object.doSomethingElse();
...
}