diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4fd3369..3b42c22 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,4 +13,10 @@
| 序号 | 变更类型 | 说明 | 时间 | 备注 |
|:---|:---|:---|:---|:--|
-| 1 | A | 基本 api 定义 | 2020-9-2 14:45:40 | |
\ No newline at end of file
+| 1 | A | 基本 api 定义 | 2020-9-2 14:45:40 | |
+
+# release_0.0.2
+
+| 序号 | 变更类型 | 说明 | 时间 | 备注 |
+|:---|:---|:---|:---|:--|
+| 1 | A | 常见锁添加 | 2020-9-2 14:45:40 | |
\ No newline at end of file
diff --git a/lock-api/pom.xml b/lock-api/pom.xml
index 03af087..0242616 100644
--- a/lock-api/pom.xml
+++ b/lock-api/pom.xml
@@ -5,7 +5,7 @@
lock
com.github.houbb
- 0.0.2-SNAPSHOT
+ 0.0.3-SNAPSHOT
4.0.0
diff --git a/lock-api/src/main/java/com/github/houbb/lock/api/core/IReadWriteLock.java b/lock-api/src/main/java/com/github/houbb/lock/api/core/IReadWriteLock.java
index eb56167..b1ff26c 100644
--- a/lock-api/src/main/java/com/github/houbb/lock/api/core/IReadWriteLock.java
+++ b/lock-api/src/main/java/com/github/houbb/lock/api/core/IReadWriteLock.java
@@ -1,11 +1,32 @@
package com.github.houbb.lock.api.core;
-import java.util.concurrent.locks.ReadWriteLock;
-
/**
- * 读写锁定义
+ * 读写锁定义接口
* @author binbin.hou
* @since 0.0.2
*/
-public interface IReadWriteLock extends ReadWriteLock {
+public interface IReadWriteLock {
+
+ /**
+ * 获取读锁
+ * @since 0.0.2
+ */
+ void lockRead();
+
+ /**
+ * 释放读锁
+ */
+ void unlockRead();
+
+ /**
+ * 获取写锁
+ * @since 0.0.2
+ */
+ void lockWrite();
+
+ /**
+ * 释放写锁
+ */
+ void unlockWrite();
+
}
diff --git a/lock-core/pom.xml b/lock-core/pom.xml
index dd1348a..9e01433 100644
--- a/lock-core/pom.xml
+++ b/lock-core/pom.xml
@@ -5,7 +5,7 @@
lock
com.github.houbb
- 0.0.2-SNAPSHOT
+ 0.0.3-SNAPSHOT
4.0.0
diff --git a/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWrite.java b/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWrite.java
index b913dfc..cba4717 100644
--- a/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWrite.java
+++ b/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWrite.java
@@ -1,5 +1,6 @@
package com.github.houbb.lock.redis.core;
+import com.github.houbb.lock.api.core.IReadWriteLock;
import com.github.houbb.log.integration.core.Log;
import com.github.houbb.log.integration.core.LogFactory;
@@ -9,7 +10,7 @@ import com.github.houbb.log.integration.core.LogFactory;
* @author binbin.hou
* @since 0.0.2
*/
-public class LockReadWrite {
+public class LockReadWrite implements IReadWriteLock {
private static final Log log = LogFactory.getLog(LockReadWrite.class);
@@ -28,13 +29,19 @@ public class LockReadWrite {
*
* @since 0.0.2
*/
- public synchronized void lockRead() throws InterruptedException {
- // 写锁存在,需要wait
- while (!tryLockRead()) {
- wait();
- }
+ @Override
+ public synchronized void lockRead() {
+ try {
+ // 写锁存在,需要wait
+ while (!tryLockRead()) {
+ wait();
+ }
- readCount++;
+ readCount++;
+ } catch (InterruptedException e) {
+ Thread.interrupted();
+ // 忽略打断
+ }
}
/**
@@ -57,6 +64,7 @@ public class LockReadWrite {
*
* @since 0.0.2
*/
+ @Override
public synchronized void unlockRead() {
readCount--;
notifyAll();
@@ -67,14 +75,19 @@ public class LockReadWrite {
*
* @since 0.0.2
*/
- public synchronized void lockWrite() throws InterruptedException {
- // 写锁存在,需要wait
- while (!tryLockWrite()) {
- wait();
- }
+ @Override
+ public synchronized void lockWrite() {
+ try {
+ // 写锁存在,需要wait
+ while (!tryLockWrite()) {
+ wait();
+ }
- // 此时已经不存在获取写锁的线程了,因此占坑,防止写锁饥饿
- writeCount++;
+ // 此时已经不存在获取写锁的线程了,因此占坑,防止写锁饥饿
+ writeCount++;
+ } catch (InterruptedException e) {
+ Thread.interrupted();
+ }
}
/**
@@ -103,6 +116,7 @@ public class LockReadWrite {
*
* @since 0.0.2
*/
+ @Override
public synchronized void unlockWrite() {
writeCount--;
notifyAll();
diff --git a/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWriteOwner.java b/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWriteOwner.java
index f3b4980..d62c41c 100644
--- a/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWriteOwner.java
+++ b/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWriteOwner.java
@@ -1,5 +1,6 @@
package com.github.houbb.lock.redis.core;
+import com.github.houbb.lock.api.core.IReadWriteLock;
import com.github.houbb.log.integration.core.Log;
import com.github.houbb.log.integration.core.LogFactory;
@@ -13,7 +14,7 @@ import java.util.concurrent.atomic.AtomicReference;
* @author binbin.hou
* @since 0.0.2
*/
-public class LockReadWriteOwner {
+public class LockReadWriteOwner implements IReadWriteLock {
private static final Log log = LogFactory.getLog(LockReadWriteOwner.class);
@@ -42,11 +43,16 @@ public class LockReadWriteOwner {
*
* @since 0.0.2
*/
- public synchronized void lockRead() throws InterruptedException {
- // 写锁存在,需要wait
- while (!tryLockRead()) {
- log.debug("获取读锁失败,进入等待状态。");
- wait();
+ @Override
+ public synchronized void lockRead() {
+ try {
+ // 写锁存在,需要wait
+ while (!tryLockRead()) {
+ log.debug("获取读锁失败,进入等待状态。");
+ wait();
+ }
+ } catch (InterruptedException e) {
+ Thread.interrupted();
}
}
@@ -75,6 +81,7 @@ public class LockReadWriteOwner {
*
* @since 0.0.2
*/
+ @Override
public synchronized void unlockRead() {
Thread currentThread = Thread.currentThread();
Integer readCount = readCountMap.get(currentThread);
@@ -83,6 +90,7 @@ public class LockReadWriteOwner {
throw new RuntimeException("当前线程未持有任何读锁,释放锁失败!");
} else {
log.debug("释放读锁,唤醒所有等待线程。");
+ readCountMap.remove(currentThread);
notifyAll();
}
}
@@ -92,14 +100,19 @@ public class LockReadWriteOwner {
*
* @since 0.0.2
*/
- public synchronized void lockWrite() throws InterruptedException {
- // 写锁存在,需要wait
- while (!tryLockWrite()) {
- wait();
- }
+ @Override
+ public synchronized void lockWrite() {
+ try {
+ // 写锁存在,需要wait
+ while (!tryLockWrite()) {
+ wait();
+ }
- // 此时已经不存在获取写锁的线程了,因此占坑,防止写锁饥饿
- writeCount++;
+ // 此时已经不存在获取写锁的线程了,因此占坑,防止写锁饥饿
+ writeCount++;
+ } catch (InterruptedException e) {
+ Thread.interrupted();
+ }
}
/**
@@ -131,6 +144,7 @@ public class LockReadWriteOwner {
*
* @since 0.0.2
*/
+ @Override
public synchronized void unlockWrite() {
boolean toNullResult = writeOwner.compareAndSet(Thread.currentThread(), null);
diff --git a/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWriteRe.java b/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWriteRe.java
index 1ce5217..10e6e56 100644
--- a/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWriteRe.java
+++ b/lock-core/src/main/java/com/github/houbb/lock/redis/core/LockReadWriteRe.java
@@ -1,5 +1,6 @@
package com.github.houbb.lock.redis.core;
+import com.github.houbb.lock.api.core.IReadWriteLock;
import com.github.houbb.log.integration.core.Log;
import com.github.houbb.log.integration.core.LogFactory;
@@ -13,7 +14,7 @@ import java.util.concurrent.atomic.AtomicReference;
* @author binbin.hou
* @since 0.0.2
*/
-public class LockReadWriteRe {
+public class LockReadWriteRe implements IReadWriteLock {
private static final Log log = LogFactory.getLog(LockReadWriteRe.class);
@@ -42,11 +43,16 @@ public class LockReadWriteRe {
*
* @since 0.0.2
*/
- public synchronized void lockRead() throws InterruptedException {
- // 写锁存在,需要wait
- while (!tryLockRead()) {
- log.debug("获取读锁失败,进入等待状态。");
- wait();
+ @Override
+ public synchronized void lockRead() {
+ try {
+ // 写锁存在,需要wait
+ while (!tryLockRead()) {
+ log.debug("获取读锁失败,进入等待状态。");
+ wait();
+ }
+ } catch (InterruptedException e) {
+ Thread.interrupted();
}
}
@@ -80,6 +86,7 @@ public class LockReadWriteRe {
*
* @since 0.0.2
*/
+ @Override
public synchronized void unlockRead() {
Thread currentThread = Thread.currentThread();
Integer readCount = readCountMap.get(currentThread);
@@ -106,15 +113,20 @@ public class LockReadWriteRe {
*
* @since 0.0.2
*/
- public synchronized void lockWrite() throws InterruptedException {
- // 写锁存在,需要wait
- while (!tryLockWrite()) {
- log.debug("获取写锁失败,进入等待状态。");
- wait();
- }
+ @Override
+ public synchronized void lockWrite() {
+ try {
+ // 写锁存在,需要wait
+ while (!tryLockWrite()) {
+ log.debug("获取写锁失败,进入等待状态。");
+ wait();
+ }
- // 此时已经不存在获取写锁的线程了,因此占坑,防止写锁饥饿
- writeCount++;
+ // 此时已经不存在获取写锁的线程了,因此占坑,防止写锁饥饿
+ writeCount++;
+ } catch (InterruptedException e) {
+ Thread.interrupted();
+ }
}
/**
@@ -152,6 +164,7 @@ public class LockReadWriteRe {
*
* @since 0.0.2
*/
+ @Override
public synchronized void unlockWrite() {
Thread currentThread = Thread.currentThread();
// 多次重入释放(当次数多于1时直接返回,否则需要释放 owner 信息)
@@ -173,7 +186,7 @@ public class LockReadWriteRe {
/**
* 释放写锁并且通知
*/
- private void unlockWriteNotify() {
+ private synchronized void unlockWriteNotify() {
writeCount--;
log.debug("释放写锁成功,唤醒所有等待线程。");
notifyAll();
diff --git a/lock-test/pom.xml b/lock-test/pom.xml
index e1f5acc..3f1f5ab 100644
--- a/lock-test/pom.xml
+++ b/lock-test/pom.xml
@@ -5,7 +5,7 @@
lock
com.github.houbb
- 0.0.2-SNAPSHOT
+ 0.0.3-SNAPSHOT
4.0.0
diff --git a/pom.xml b/pom.xml
index d6b073a..b1993df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.github.houbb
lock
pom
- 0.0.2-SNAPSHOT
+ 0.0.3-SNAPSHOT
lock-api
lock-core
diff --git a/release.bat b/release.bat
index b2d7667..96acc1a 100644
--- a/release.bat
+++ b/release.bat
@@ -10,9 +10,9 @@ ECHO "============================= RELEASE START..."
:: 版本号信息(需要手动指定)
:::: 旧版本名称
-SET version=0.0.1
+SET version=0.0.2
:::: 新版本名称
-SET newVersion=0.0.2
+SET newVersion=0.0.3
:::: 组织名称
SET groupName=com.github.houbb
:::: 项目名称