diff --git a/.gitignore b/.gitignore index b9ffdc599bf670936e48d1033d5475cac4ad7bec..e8da5991dba55567f40f2608e8b7324a630d1c33 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,6 @@ gradle-app.setting .gradle/* .idea/* -gradle/* build/ # # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 diff --git a/README.md b/README.md index 3bfc42f6720f8562b20e36861844efc4c8390744..fdd4aec5279dc97bf2d5721b9df049b35c46eddc 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ![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/PDCache) -- +-- [Java Doc](https://apidoc.gitee.com/fybug/PDCache) -- ------------------------------------------------------------------------------- @@ -94,7 +94,7 @@ void main(String[] args) { ## 使用方法 请导入其 `jar` 文件,文件在 **发行版** 或项目的 **jar** 文件夹下可以找到 -> PDCache_bin.jar 为包含了依赖库的包,PDCache.jar 为不包含依赖库的包 +> PDCache_bin.jar 为包含了依赖库的包,PDCache.jar 为不包含依赖库的包,PDCache_all.jar 为包含了依赖库与源码的包 **发行版中可以看到全部版本
项目下的 jar 文件夹是当前最新的每夜版** diff --git a/build.gradle b/build.gradle index 4042899e7f6acd2b6b73553496bfe1ffbec05fb7..c3fa709bf59e5688e5040b8534740bd12f8ec02e 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ tasks.withType(JavaCompile) { } group 'fybug.nulll' -version = '0.0.2 expand 1' +version = '0.0.2 expand 2' sourceCompatibility = '14' targetCompatibility = '14' diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..87b738cbd051603d91cc39de6cb000dd98fe6b02 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000000000000000000000000000000000000..622ab64a3cb60378cd29384961554c0b032c9368 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/jar/PDCache.jar b/jar/PDCache.jar index ecd8aae740c26dbb466ad65b809b0248331ee805..9cafa31d0b6637362e08ae512d43df9bf187de9e 100644 Binary files a/jar/PDCache.jar and b/jar/PDCache.jar differ diff --git a/jar/PDCache_all.jar b/jar/PDCache_all.jar new file mode 100644 index 0000000000000000000000000000000000000000..efcfb3e139c5d4df128fa4b8c4a58bfee2695107 Binary files /dev/null and b/jar/PDCache_all.jar differ diff --git a/jar/PDCache_bin.jar b/jar/PDCache_bin.jar index 2c3676eea1453bf85550b7a08998684ad8453a5d..ad6c02ae908db4c3bfc13de67693a05a1e934f04 100644 Binary files a/jar/PDCache_bin.jar and b/jar/PDCache_bin.jar differ diff --git a/lib/PDConcurrent.jar b/lib/PDConcurrent_all.jar similarity index 49% rename from lib/PDConcurrent.jar rename to lib/PDConcurrent_all.jar index af87a47ebd14a0afbb3edf9062482698d11b1931..6bc9b5b2763635c42904981ce8aa1c19f992286c 100644 Binary files a/lib/PDConcurrent.jar and b/lib/PDConcurrent_all.jar differ diff --git a/pom.xml b/pom.xml index 862516d35de8dbb3a6acbf1bcf75fce5dc9ba21f..f9c2bfb61f0454207c5a8530bfd0f0bf7887bedf 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ fybug.nulll PDCache - 0.0.2 expand 1 + 0.0.2 expand 2 diff --git a/settings.gradle b/settings.gradle index 390f41879e626369498a4dbe49d3051b0535c795..d06843ed7ffb8c6b5be67df575b2ae125a6ca4a4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1 @@ rootProject.name = 'PDCache' - diff --git a/src/main/java/fybug/nulll/pdcache/memory/TimeMapCache.java b/src/main/java/fybug/nulll/pdcache/memory/TimeMapCache.java index e3eabb0223543d56eb4d8fcaad58283aba0c4010..5e289747907ad9bf6817a1f6056d51cfdad8b18e 100644 --- a/src/main/java/fybug/nulll/pdcache/memory/TimeMapCache.java +++ b/src/main/java/fybug/nulll/pdcache/memory/TimeMapCache.java @@ -10,6 +10,7 @@ import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.Consumer; +import java.util.function.Supplier; import fybug.nulll.pdconcurrent.ObjLock; import fybug.nulll.pdconcurrent.SyLock; @@ -44,7 +45,7 @@ import lombok.val; * * * @author fybug - * @version 0.0.2 + * @version 0.0.3 * @since memory 0.0.2 */ public @@ -190,6 +191,8 @@ class TimeMapCache { /** * 使用数据 + *

+ * 使用读锁进行 * * @param k 数据的键 * @@ -203,16 +206,22 @@ class TimeMapCache { /** * 使用数据 + *

+ * 如果刷新时间为 0,则使用 {@link SyLock#read(Supplier)} 读锁进行
+ * 如果需要刷新数据存活时间,则使用 {@link SyLock#write(Supplier)} 写锁进行 * * @param k 数据的键 * @param newDatatime 数据的新存活时间,从现在开始记录 * * @return 返回之前保存的数据,如果数据过期返回 null + * + * @since TimeMapCache v0.0.3 */ @Nullable public V getData(@NotNull K k, long newDatatime) { - return LOCK.write(() -> { + // 运行函数 + Supplier r = () -> { if (check(k)) { var v = map.remove(k); @@ -225,7 +234,13 @@ class TimeMapCache { } GcVal(map.remove(k)); return null; - }); + }; + + // 刷新时间用写锁,不刷新用读锁 + if (newDatatime <= 0) + return LOCK.read(r); + else + return LOCK.write(r); } /**