Skip to content
fybug edited this page Jun 12, 2025 · 18 revisions
Icon

使用

请导入其 jar 文件,文件在 发行版 或项目的 jar 文件夹下可以找到。

发行版中可以看到全部版本
项目下的 jar 文件夹是当前最新的每夜版

接着根据自己的环境进行导入

具体导入方法请查 百度 或 google

快速使用示例

public final SyLock lock = new ObjLock();

public static
void main(String[] args) {
  // 尝试申请读锁
  lock.read(() -> {
    // 并发域代码内容
    return null; // 可选择是否返回
  });

  // 尝试申请写锁
  lock.write(() -> {
    // 并发域代码内容
    return null; // 可选择是否返回
  });
}

以上即为核心用法,将需要并发处理的代码通过一个tryRunnable接口包起来。

启用并发管理以及停止并发管理部分的的代码由本工具封装,直接通过上述代码的方式传入需要运行的内容即可

通过 PDUtilFunctionExpand 包对java的一些标准函数接口拓展了可以抛出异常的封装,具体均表现为带有 try开头

目前一共就三个锁

  • ObjLock
  • ReLock
  • RWLock

均可通过SyLock.new[对应的锁类名]()获取实例,也可以直接通过new创建

可到实现详解中查看更详细的内容

例如

SyLock sy = SyLock.newObjLock()

SyLock sy = new ObjLock()

说明

try前缀的为尝试获取锁的实现,这意味着不一定能成功获取到锁,但也意味着不需要等待。

所有接口均可有返回数据以及无返回,也有可抛异常的变体。

以下方法仅在使用读写锁的时候会有读写域区别,其他管理方法均无区别。 但还是建议区分好。

read() & tryread() 使用读锁

write() & trywrite() 使用写锁

不同的锁类型还会有内部的专有方法

对比示例

对应传统锁的用法

public
class Main {
  // 锁对象
  private final SyLock LOCK = new ObjLock();

  public static
  void main(String[] args) {
    // 使用
    LOCK.read(() -> {
      System.out.println("asd");
    });
    //  不使用
    synchronized ( LOCK ){
      System.out.println("asd");
    }
  }
}

try*** 类型用法,回调中会传入一个参数,代表是否获得锁

public
class Main {
  // 锁对象
  private final SyLock LOCK = new ObjLock();

  public static
  void main(String[] args) {
    // 使用
    LOCK.tryread(b -> {
      if ( b ) {
        // 成功获得锁
      } else {
        // 没有获得锁
      }
    }, e -> {
      e.printStackTrace();
    }, () -> {
      System.out.println("finally");
    });

    //  不使用
    synchronized ( LOCK ){
      try {
        System.out.println("asd");
      } catch ( IOException e ) {
        e.printStackTrace();
      } finally {
        System.out.println("finally");
      }
    }

  }
}

Clone this wiki locally