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";
/**
* aliasRegistry
* alias registry
*/
private AliasRegistry aliasRegistry;

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

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

@ -38,6 +38,9 @@ public interface ThreadPoolPluginRegistry {
* Register a {@link ThreadPoolPlugin}
*
* @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);

Loading…
Cancel
Save