Можно ли автоматически закрывать замки?

Можно ли автоматически закрывать блокировки? То есть вместо:

Lock someLock = new ReentrantLock();
someLock.lock();
try
{
    // ...
}
finally
{
    someLock.unlock();
}

я могу сказать:

try (Lock someLock = new ReentrantLock())
{
    someLock.lock();
    // ...
}

в Java 7?

42
задан fredoverflow 6 August 2011 в 08:46
поделиться

1 ответ

Расширение решения Java8 @skoskav к ReentrantReadWriteLock:

public interface ResourceLock extends AutoCloseable {
    /**
     * Unlocking doesn't throw any checked exception.
     */
    @Override
    void close();
}    
public class CloseableReentrantRWLock extends ReentrantReadWriteLock {

    /**
     * @return an {@link AutoCloseable} once the ReadLock has been acquired
     */
    public ResourceLock lockRead() {
        this.readLock().lock();
        return () -> this.readLock().unlock();
    }

     /**
     * @return an {@link AutoCloseable} once the WriteLock has been acquired.
     */
    public ResourceLock lockWrite() {
        this.writeLock().lock();
        return () -> this.writeLock().unlock();
    }
} 
1
ответ дан 26 November 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: