|
|
|
@ -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() {
|
|
|
|
|
Lock writeLock = instanceLock.writeLock();
|
|
|
|
|
writeLock.lock();
|
|
|
|
|
try {
|
|
|
|
|
registeredPlugins.clear();
|
|
|
|
|
taskAwarePluginList.clear();
|
|
|
|
|
executeAwarePluginList.clear();
|
|
|
|
|
rejectedAwarePluginList.clear();
|
|
|
|
|
shutdownAwarePluginList.clear();
|
|
|
|
|
} finally {
|
|
|
|
|
writeLock.unlock();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -74,7 +88,10 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
|
|
|
|
|
* @see ThreadPoolPlugin#getId()
|
|
|
|
|
*/
|
|
|
|
|
@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();
|
|
|
|
|
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) {
|
|
|
|
|
shutdownAwarePluginList.add((ShutdownAwarePlugin) aware);
|
|
|
|
|
}
|
|
|
|
|
} finally {
|
|
|
|
|
writeLock.unlock();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -101,10 +121,14 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
|
|
|
|
|
* @param id name
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public synchronized void unregister(String id) {
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
@ -118,6 +142,9 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
|
|
|
|
|
shutdownAwarePluginList.remove(old);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
} finally {
|
|
|
|
|
writeLock.unlock();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -128,7 +155,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public boolean isRegistered(String 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) {
|
|
|
|
|
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() {
|
|
|
|
|
Lock readLock = instanceLock.readLock();
|
|
|
|
|
try {
|
|
|
|
|
return executeAwarePluginList;
|
|
|
|
|
} finally {
|
|
|
|
|
readLock.unlock();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -161,7 +203,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Collection<RejectedAwarePlugin> getRejectedAwareList() {
|
|
|
|
|
Lock readLock = instanceLock.readLock();
|
|
|
|
|
try {
|
|
|
|
|
return rejectedAwarePluginList;
|
|
|
|
|
} finally {
|
|
|
|
|
readLock.unlock();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -171,7 +218,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Collection<ShutdownAwarePlugin> getShutdownAwareList() {
|
|
|
|
|
Lock readLock = instanceLock.readLock();
|
|
|
|
|
try {
|
|
|
|
|
return shutdownAwarePluginList;
|
|
|
|
|
} finally {
|
|
|
|
|
readLock.unlock();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -181,7 +233,12 @@ public class DefaultThreadPoolPluginRegistry implements ThreadPoolPluginRegistry
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public Collection<TaskAwarePlugin> getTaskAwareList() {
|
|
|
|
|
Lock readLock = instanceLock.readLock();
|
|
|
|
|
try {
|
|
|
|
|
return taskAwarePluginList;
|
|
|
|
|
} finally {
|
|
|
|
|
readLock.unlock();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|