temp commit

pull/836/head
huangchengxing 3 years ago
parent 824afc4da3
commit f101adf64f

@ -30,7 +30,7 @@ public class DefaultThreadPoolPluginRegistrar
public static final String REGISTRAR_NAME = "DefaultThreadPoolPluginRegistrar"; public static final String REGISTRAR_NAME = "DefaultThreadPoolPluginRegistrar";
/** /**
* aliasRegistry * alias registry
*/ */
private AliasRegistry aliasRegistry; private AliasRegistry aliasRegistry;

@ -21,6 +21,9 @@ import cn.hippo4j.common.toolkit.Assert;
import lombok.NonNull; import lombok.NonNull;
import java.util.*; import java.util.*;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/** /**
* The default implementation of {@link ThreadPoolPluginRegistry}. * The default implementation of {@link ThreadPoolPluginRegistry}.
@ -29,6 +32,11 @@ import java.util.*;
*/ */
public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry { public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry {
/**
* lock of this instance
*/
private final ReadWriteLock instanceLock = new ReentrantReadWriteLock();
/** /**
* Registered {@link ThreadPoolPlugin}. * Registered {@link ThreadPoolPlugin}.
*/ */
@ -59,11 +67,17 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
*/ */
@Override @Override
public synchronized void clear() { public synchronized void clear() {
Lock writeLock = instanceLock.writeLock();
writeLock.lock();
try {
registeredPlugins.clear(); registeredPlugins.clear();
taskAwarePluginList.clear(); taskAwarePluginList.clear();
executeAwarePluginList.clear(); executeAwarePluginList.clear();
rejectedAwarePluginList.clear(); rejectedAwarePluginList.clear();
shutdownAwarePluginList.clear(); shutdownAwarePluginList.clear();
} finally {
writeLock.unlock();
}
} }
/** /**
@ -74,7 +88,10 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
* @see ThreadPoolPlugin#getId() * @see ThreadPoolPlugin#getId()
*/ */
@Override @Override
public synchronized void register(@NonNull ThreadPoolPlugin aware) { public void register(@NonNull ThreadPoolPlugin aware) {
Lock writeLock = instanceLock.writeLock();
writeLock.lock();
try {
String id = aware.getId(); String id = aware.getId();
Assert.isTrue(!isRegistered(id), "The plug-in with id [" + id + "] has been registered"); Assert.isTrue(!isRegistered(id), "The plug-in with id [" + id + "] has been registered");
@ -93,6 +110,9 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
if (aware instanceof ShutdownAwarePlugin) { if (aware instanceof ShutdownAwarePlugin) {
shutdownAwarePluginList.add((ShutdownAwarePlugin) aware); shutdownAwarePluginList.add((ShutdownAwarePlugin) aware);
} }
} finally {
writeLock.unlock();
}
} }
/** /**
@ -101,10 +121,14 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
* @param id name * @param id name
*/ */
@Override @Override
public synchronized void unregister(String id) { public void unregister(String id) {
Lock writeLock = instanceLock.writeLock();
writeLock.lock();
try {
Optional.ofNullable(id) Optional.ofNullable(id)
.map(registeredPlugins::remove) .map(registeredPlugins::remove)
.ifPresent(old -> { .ifPresent(old -> {
// remove quick index if necessary
if (old instanceof TaskAwarePlugin) { if (old instanceof TaskAwarePlugin) {
taskAwarePluginList.remove(old); taskAwarePluginList.remove(old);
} }
@ -118,6 +142,9 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
shutdownAwarePluginList.remove(old); shutdownAwarePluginList.remove(old);
} }
}); });
} finally {
writeLock.unlock();
}
} }
/** /**
@ -128,7 +155,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
*/ */
@Override @Override
public boolean isRegistered(String id) { public boolean isRegistered(String id) {
Lock readLock = instanceLock.readLock();
try {
return registeredPlugins.containsKey(id); return registeredPlugins.containsKey(id);
} finally {
readLock.unlock();
}
} }
/** /**
@ -141,7 +173,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <A extends ThreadPoolPlugin> A getAware(String id) { public <A extends ThreadPoolPlugin> A getAware(String id) {
Lock readLock = instanceLock.readLock();
try {
return (A) registeredPlugins.get(id); return (A) registeredPlugins.get(id);
} finally {
readLock.unlock();
}
} }
/** /**
@ -151,7 +188,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
*/ */
@Override @Override
public Collection<ExecuteAwarePlugin> getExecuteAwareList() { public Collection<ExecuteAwarePlugin> getExecuteAwareList() {
Lock readLock = instanceLock.readLock();
try {
return executeAwarePluginList; return executeAwarePluginList;
} finally {
readLock.unlock();
}
} }
/** /**
@ -161,7 +203,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
*/ */
@Override @Override
public Collection<RejectedAwarePlugin> getRejectedAwareList() { public Collection<RejectedAwarePlugin> getRejectedAwareList() {
Lock readLock = instanceLock.readLock();
try {
return rejectedAwarePluginList; return rejectedAwarePluginList;
} finally {
readLock.unlock();
}
} }
/** /**
@ -171,7 +218,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
*/ */
@Override @Override
public Collection<ShutdownAwarePlugin> getShutdownAwareList() { public Collection<ShutdownAwarePlugin> getShutdownAwareList() {
Lock readLock = instanceLock.readLock();
try {
return shutdownAwarePluginList; return shutdownAwarePluginList;
} finally {
readLock.unlock();
}
} }
/** /**
@ -181,7 +233,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
*/ */
@Override @Override
public Collection<TaskAwarePlugin> getTaskAwareList() { public Collection<TaskAwarePlugin> getTaskAwareList() {
Lock readLock = instanceLock.readLock();
try {
return taskAwarePluginList; return taskAwarePluginList;
} finally {
readLock.unlock();
}
} }
} }

@ -11,6 +11,7 @@ public interface ThreadPoolPluginRegistrar {
/** /**
* Get id. * Get id.
* In spring container, the obtained id will be used as the alias of the bean name.
* *
* @return id * @return id
*/ */

@ -38,6 +38,9 @@ public interface ThreadPoolPluginRegistry {
* Register a {@link ThreadPoolPlugin} * Register a {@link ThreadPoolPlugin}
* *
* @param aware aware * @param aware aware
* @throws IllegalArgumentException thrown when a plugin with the same {@link ThreadPoolPlugin#getId()}
* already exists in the registry
* @see ThreadPoolPlugin#getId()
*/ */
void register(ThreadPoolPlugin aware); void register(ThreadPoolPlugin aware);

Loading…
Cancel
Save