All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.lulihu.ObjectKit.ReadWriteLockKit Maven / Gradle / Ivy

package net.lulihu.ObjectKit;

import lombok.extern.slf4j.Slf4j;
import net.lulihu.functional.Consumption;
import net.lulihu.functional.ConsumptionResult;

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

/**
 * 读写锁工具
 */
@Slf4j
public class ReadWriteLockKit {

    // 读写锁
    private final Lock readLock;
    private final Lock writeLock;


    public ReadWriteLockKit() {
        this(false);
    }

    /**
     * @param fair true为公平锁 反之为竞争锁
     */
    public ReadWriteLockKit(boolean fair) {
        ReadWriteLock globalLock = new ReentrantReadWriteLock(fair);
        this.readLock = globalLock.readLock();
        this.writeLock = globalLock.writeLock();
    }


    /**
     * 有返回值执行读锁方法
     *
     * @param consumption 有返回值的执行表达式
     * @param          返回值
     * @return 指定的返回结果
     */
    public  T exeReadLockMethod(ConsumptionResult consumption) {
        try {
            readLock.lock();//先加读锁
            // 执行目标方法
            return consumption.accept();
        } finally {
            readLock.unlock();//解锁
        }
    }

    /**
     * 有返回值执行写锁方法
     *
     * @param consumption 有返回值的执行表达式
     * @param          返回值
     * @return 指定的返回结果
     */
    public  T exeWriteLockMethod(ConsumptionResult consumption) {
        try {
            writeLock.lock();//先加写锁
            // 执行目标方法
            return consumption.accept();
        } finally {
            writeLock.unlock();//解锁
        }
    }


    /**
     * 无返回值执行写锁方法
     *
     * @param consumption 无返回值的执行表达式
     */
    public void exeWriteLockMethod(Consumption consumption) {
        try {
            writeLock.lock();//先加写锁
            // 执行目标方法
            consumption.accept();
        } finally {
            writeLock.unlock();//解锁
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy