-
Notifications
You must be signed in to change notification settings - Fork 0
Home
fybug edited this page Jun 12, 2025
·
18 revisions
请导入其 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");
}
}
}
}