【Java】LockAdapter(Lock 简单模板封装)

ReentrantLock 简单模板封装

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.function.Supplier;

/**
 * A simple adapter mode of {@link java.util.concurrent.locks.Lock}
 *
 * @since 1.8
 */
public final class LockAdapter {

    private static Lock _lock_ = null;

    public LockAdapter() {
        this(new ReentrantLock());
    }

    public LockAdapter (Lock lock) {
        _lock_ = lock;
    }

    // --------------------------------------------------------------------------------------------

    public void lock(Runnable runnable) {
        if (runnable == null) { return; }
        _lock_.lock();
        try {
            runnable.run();
        } finally {
            _lock_.unlock();
        }
    }

    public <R> R lock(Supplier<R> supplier) {
        if (supplier == null) { return null; }
        _lock_.lock();
        try {
            return supplier.get();
        } finally {
            _lock_.unlock();
        }
    }

}

ReentrantReadWriteLock 简单模板封装

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.function.Supplier;

/**
 * A simple adapter mode of {@link java.util.concurrent.locks.ReadWriteLock}
 *
 * @since 1.8
 */
public final class ReadWriteLockAdapter {

    private static Lock _rl_ = null;
    private static Lock _wl_ = null;

    public ReadWriteLockAdapter() {
        this(new ReentrantReadWriteLock());
    }

    public ReadWriteLockAdapter(ReadWriteLock rwl) {
        _rl_ = rwl.readLock();
        _wl_ = rwl.writeLock();
    }

    // --------------------------------------------------------------------------------------------

    public void readLock(Runnable runnable) {
        if (runnable == null) { return; }
        _rl_.lock();
        try {
            runnable.run();
        } finally {
            _rl_.unlock();
        }
    }

    public <R> R readLock(Supplier<R> supplier) {
        if (supplier == null) { return null; }
        _rl_.lock();
        try {
            return supplier.get();
        } finally {
            _rl_.unlock();
        }
    }   

    // --------------------------------------------------------------------------------------------

    public void writeLock(Runnable runnable) {
        if (runnable == null) { return; }
        _wl_.lock();
        try {
            runnable.run();
        } finally {
            _wl_.unlock();
        }
    }

    public <R> R writeLock(Supplier<R> supplier) {
        if (supplier == null) { return null; }
        _wl_.lock();
        try {
            return supplier.get();
        } finally {
            _wl_.unlock();
        }
    }

}
(0)

相关推荐

  • 造轮子-ThreadPoolExecutor

    以下代码的实现逻辑出自于公众号 码农翻身 <你管这破玩意叫线程池?> - PS:刘欣老师在我心中是软件技术行业的大刘. 线程池接口 public interface Executor { ...

  • 最简单的封装系统教程,轻松制作自己的专用系统

    在上期重装系统的教程中,很多同学想知道如何封装系统,恰好我也会,今天为大家带来最简单的系统封装教程. 准备工具: VM虚拟机 win10原版镜像 微软官网免费下载 EasySysprep IT天空出品 ...

  • Python和Java哪个更简单?四大区别!

    Python和Java都是当下比较流行的编程语言,各自在各自的领域都拥有不错的表现,当然很多人转行学习编程语言,都会十分纠结选择Python还是Java,你知道选择哪个吗?接下来我们详细对比一下. 1 ...

  • java学习——92.简单记事本

    上一篇演示了"记事本"的大概功能. 本篇贴的是其代码. 本记事本有三个类: Start是main方法所在的类. Jsb是主类. GuanYu是关于窗口的类. 本处帖的是第一个类: ...

  • java学习——84.简单通讯录(八)

    修改联系人类: 其完整代码如下 /** 此类为新增联系人窗口 */ import java.awt.*; import javax.swing.*; import java.awt.event.*; ...

  • java学习——80.简单通讯录(五)

    主界面类中的事件: 主界面中主要是底部bottom面板中的按钮需要事件,本事件方法中均是针对此的. 其完整代码如下: //处理按钮动作事件 publicvoid actionPerformed(Act ...

  • java学习——79.简单通讯录(四)

    主界面类: 终于进入主界面了. 主界面代码稍有点长,所以我将之分为布局和事件两部分介绍,但都是在同一个类Txl中. 对于主界面的布局,我分为了三部分:上.中.下,各用了一个JPanel面板. 然后将这 ...

  • java学习——76.简单通讯录(一)

    学Java也好几个月了,图形用户界面了解了挺多,觉得是时候应该用一个稍微综合一点的图形用户界面来检验一下这段时间的学习成果了,从前几天就开始准备,后来选择了这个题目:通讯录. 原本应该是做手机通讯录, ...

  • 简单的封装 原生视频播放器 video 插件

    通过对官方的 VideoPlayer 视频播放器组件简直封装下方便使用 plus.video.VideoPlayer 开发工具:HBuilder x  支持在线打包实现. 在有需要的页面引入 vide ...

  • 学校活动(教师)表彰大会演讲稿撰写(简单模板范文)

    学校里面不定期的会举办各类活动,有时候需要作为发言人上台进行演讲,而时间紧任务重来不及写稿件就成了一件很头痛的事情.这里个人(才疏浅薄)准备了一篇以教师为角度的演讲稿范文,大家可以参考一下. 演讲稿范 ...