瀏覽代碼

使用CopyOnWriteArrayList替换锁

zhou-hao 3 年之前
父節點
當前提交
afa33af59d

+ 11 - 23
hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/ReactiveAuthenticationHolder.java

@@ -22,10 +22,8 @@ import org.hswebframework.web.authorization.simple.SimpleAuthentication;
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -45,15 +43,15 @@ import java.util.stream.Collectors;
  * @since 4.0
  */
 public final class ReactiveAuthenticationHolder {
-    private static final List<ReactiveAuthenticationSupplier> suppliers = new ArrayList<>();
-
-    private static final ReadWriteLock lock = new ReentrantReadWriteLock();
+    private static final List<ReactiveAuthenticationSupplier> suppliers = new CopyOnWriteArrayList<>();
 
     private static Mono<Authentication> get(Function<ReactiveAuthenticationSupplier, Mono<Authentication>> function) {
 
-        return Flux.concat(suppliers.stream()
-                .map(function)
-                .collect(Collectors.toList()))
+        return Flux
+                .concat(suppliers
+                                .stream()
+                                .map(function)
+                                .collect(Collectors.toList()))
                 .reduceWith(SimpleAuthentication::new, Authentication::merge)
                 .filter(a -> a.getUser() != null);
     }
@@ -82,22 +80,12 @@ public final class ReactiveAuthenticationHolder {
      * @param supplier
      */
     public static void addSupplier(ReactiveAuthenticationSupplier supplier) {
-        lock.writeLock().lock();
-        try {
-            suppliers.add(supplier);
-        } finally {
-            lock.writeLock().unlock();
-        }
+        suppliers.add(supplier);
     }
 
-    public static void setSupplier(ReactiveAuthenticationSupplier supplier){
-        lock.writeLock().lock();
-        try {
-            suppliers.clear();
-            suppliers.add(supplier);
-        } finally {
-            lock.writeLock().unlock();
-        }
+    public static void setSupplier(ReactiveAuthenticationSupplier supplier) {
+        suppliers.clear();
+        suppliers.add(supplier);
     }
 
 }