[英]Will this code not result in a deadlock? Java Threads locking
因此,我想在我的课堂上做到这一点。
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;
}
}
while(!tryToLock())
{
Thread.sleep(1000);
}
糟糕的主意。
使用java.util.concurrent中的Lock实现 。
或者只是一个synchronized
块。
根据您的意图,这样做会容易得多(因为您可以在Java中将任何对象用作互斥体):
synchronized( object ) {
object.doSomething();
object.doAnotherThing();
object.doAnotherThingYet();
}
如果您需要更好的控制,尤其是tryLock,请查看“ Lock”接口和实现该接口的类。
您的tryToUnlock()
方法不正确,但从技术上讲可以正常工作。
不过,大多数Java程序员都会做更多类似的事情:
synchronized (object) {
object.doSomething();
object.doSomethingElse();
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.