繁体   English   中英

Java 8-ReentrantLock /锁定对象

[英]Java 8 - ReentrantLock/Locking an object

我想知道使用ReentrantLock是否可以解决我的问题; 我试图“锁定”(阻止其他线程访问/使用它)一个对象,直到完成某个操作,然后将其解锁,以便其他线程可以访问它。 我想到了使用sun的Unsafe#monitorEnter / exit,但这可能会导致死锁。

想象一下以下情况:

public void doSomething() {
    Object object = someObject;

    // Object should be locked until operation is complete.
    doSomethingElse(object);

    // Object should now be unlocked so other threads can use/access it.
}

public void doSomethingElse(Object object) {
    // Something happens to the object here
}

这将是解决方案吗?

  ReentrantLock reentrantLock = new ReentrantLock();

  public void doSomething() {
        Object object = someObject;

        // Object should be locked until operation is complete.
        reentrantLock.lock();
        doSomethingElse(object);

        reentrantLock.unlock();

        // Unlock object for other threads after complete.
    }

    public void doSomethingElse(Object object) {
        // Something happens to the object here
    }

提前致谢。

我建议在doSomethingElse上使用同步方法

public void doSomething() {
    Object object = someObject;

    // Object should be locked until operation is complete.
    doSomethingElse(object);
    // Unlock object for other threads after complete.
}

public synchronized void doSomethingElse(Object object) {
    // Something happens to the object here
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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