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

使用

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

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

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

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

快速使用示例

publicfinalSyLocklock = newObjLock();
publicstaticvoidmain(String[] args) {
// 尝试申请读锁lock.read(() -> {
// 并发域代码内容returnnull; // 可选择是否返回
});
// 尝试申请写锁lock.write(() -> {
// 并发域代码内容returnnull; // 可选择是否返回
});
}

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

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

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

目前一共就三个锁

  • ObjLock
  • ReLock
  • RWLock

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

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

例如

SyLock sy = SyLock.newObjLock()

SyLock sy = new ObjLock()

说明

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

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

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

read() & tryread() 使用读锁

write() & trywrite() 使用写锁

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

对比示例

对应传统锁的用法

publicclassMain {
// 锁对象privatefinalSyLockLOCK = newObjLock();
publicstaticvoidmain(String[] args) {
// 使用LOCK.read(() -> {
System.out.println("asd");
});
// 不使用synchronized ( LOCK ){
System.out.println("asd");
}
}
}

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

publicclassMain {
// 锁对象privatefinalSyLockLOCK = newObjLock();
publicstaticvoidmain(String[] args) {
// 使用LOCK.tryread(b -> {
if ( b ) {
// 成功获得锁
} else {
// 没有获得锁
}
}, e -> {
e.printStackTrace();
}, () -> {
System.out.println("finally");
});
// 不使用synchronized ( LOCK ){
try {
System.out.println("asd");
} catch ( IOExceptione ) {
e.printStackTrace();
} finally {
System.out.println("finally");
}
}
}
}

Clone this wiki locally