Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
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

AltStyle によって変換されたページ (->オリジナル) /