繁体   English   中英

此代码不会导致死锁吗? Java线程锁定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM