Java 自动释放锁的几种实现

Python 提供了 try-with-lock,不需要显式地获取和释放锁,非常方便。Java 没有这样的机制,不过我们可以自己实现这个机制。

本文以访问量统计的简化场景为例,介绍相关内容,即:

public class VisitCounter {
    @Getter
    private long visits = 0;

    public void visit() {
        visits++;
    }
}

这里的 visit() 方法,是线程不安全的,若多线程并发访问该方法,visits结果是错的。因此多线程下需要上锁,即:

public void safeVisit() {
    try {
        lock.lock();
        visits++;
    } finally {
        lock.unlock();
    }
}

为避免lock... unlock的麻烦,本文提供了以下几种封装思路,仅供参考。

方案1 使用AutoCloseable

java7 开始提供的 AutoCloseable 接口,实现了 try-with-resources 功能,可以利用它来实现锁的自动释放。

public class AutoCloseableLock implements AutoCloseable{
    private final Lock loc
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值