在finally {}中解锁时返回值

时间:2017-02-03 08:55:31

标签: java concurrency locking

我想知道这段代码是否是线程安全的:

public class SafeSequenceWithLock implements Sequence {

  private int value = 0;
  Lock lock = new ReentrantLock();
  @Override
  public int getAndIncrement() {
    lock.lock();
    try{
        value++;    
        return value;
    }finally{
        System.out.println("XXX");
        lock.unlock();
    }
  }
}

锁定的锁定会在返回值后持续存在,还是与使用...

相同
lock.lock();  
value++;
lock.unlock();
// another thread could change "value" here!
return value;

...

1 个答案:

答案 0 :(得分:0)

对于您的具体示例,它将与您提到的相同:锁定将被解锁,然后将返回该值:在方法返回之前调用finally块。