diff --git a/README.md b/README.md index 2e085dfa4968c1016f12554af990292b8d9a91f1..bd4f252660e047e00d55ef2130917587d2f17ac6 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ![java library](https://img.shields.io/badge/type-Libary-gr.svg "type") ![JDK 14](https://img.shields.io/badge/JDK-14-green.svg "SDK") -![Gradle 6.4.1](https://img.shields.io/badge/Gradle-6.4.1-04303b.svg "tool") +![Gradle 6.5](https://img.shields.io/badge/Gradle-6.5-04303b.svg "tool") ![Apache 2](https://img.shields.io/badge/license-Apache%202-blue.svg "License") -- [Java Doc](https://apidoc.gitee.com/PatternDirClean/PDConcurrent) -- @@ -14,20 +14,93 @@ ------------------------------------------------------------------------------- -## 简介 - -轻量级,高可靠,基于接口代码插入和 java 原生并发管理实现的 java 并发管理工具,可让开发人员省去处理并发的一些细节。 +**专注于单个功能,无附加bug** -接口统一采用读写锁规范,可使用接口中不同的工厂方法,构造内部使用不同并发实现的管理工具。 +## 简介 -使用接口将运行的代码传入并发域中,可通过接口抛出异常与返回数据,亦可将 try 块中的代码通过接口的方式插入并发域中的 try 块中。 +轻量级,高可靠,易学习的并发管理工具。 + +## 核心用法 + +如果你已经熟悉 java 的多线程管理,尤其是 ReentrantReadWriteLock 读写锁的话你会更容易学会本工具。 + +本工具采用读写锁标准,无论内部实现如何,外部接口均提供 **read, **write 方法区分读锁并发域和写锁并发域 + +### \> > 基础使用示例 +```java +// 尝试申请读锁 +SyLock.newObjLock().read(() -> { + // 并发域代码内容 + [return null;]? // 可选择是否返回 +}); + +// 尝试申请写锁 +SyLock.newObjLock().write(() -> { + [return null;]? +}); +``` + +以上即为核心用法,将需要并发处理的代码通过一个 `Runnable` 接口包起来。启用并发管理以及停止并发管理部分的的代码由本工具封装,直接通过上述代码的方式传入需要运行的内容即可 + +> SyLock 为该工具的标准接口,同时包含不同实现的基础工厂方法。 + +## 锁变形示例 + +可通过接口的工厂方法实例化内部采用不同实现的锁。 + +### \> > synchronized 锁 +```java +// 使用 +SyLock.newObjLock().read(() -> { + // 并发域代码内容 +}); + +// 不使用 +synchronized ( new Object() ){ + // 并发域代码内容 +} +``` + +### \> > ReentrantLock 锁 +```java +// 使用 +SyLock.newReLock().read(() -> { + // 并发域代码内容 +}); + +// 不使用 +ReentrantLock lock = new ReentrantLock(); +try { + lock.lock(); + // 并发域代码内容 +} finally { + lock.unlock(); +} +``` + +### \> > ReadWriteLock 锁 +```java +// 使用 +SyLock.newRWLock().read(() -> { + // 并发域代码内容 +}); + +// 不使用 +ReadWriteLock lock = new ReentrantReadWriteLock(); +try { + lock.readLock().lock(); + // 并发域代码内容 +} finally { + lock.readLock().unlock(); +} +``` ## 使用方法 请导入其 `jar` 文件,文件在 **发行版** 或项目的 **jar** 文件夹下可以找到 **发行版中可以看到全部版本
项目下的 jar 文件夹是当前最新的每夜版** -可通过 **WIKI** 或者 **doc文档** 查看示例 +可通过 **WIKI** 或者 **doc文档** 深入学习本工具 ## 分支说明 **dev-master**:当前的开发分支,可以拿到最新的每夜版 jar diff --git a/jar/PDConcurrent.jar b/jar/PDConcurrent.jar index 0172f8b1072aef824255e6a31739b2b1ed4abbdd..af87a47ebd14a0afbb3edf9062482698d11b1931 100644 Binary files a/jar/PDConcurrent.jar and b/jar/PDConcurrent.jar differ