Skip to content

Commit 02d3ad3

Browse files
committed
Use LinkedList for large reloading list, and synchronized for multi-threaded
1 parent eefd045 commit 02d3ad3

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/main/java/org/maxgamer/quickshop/util/reload/ReloadManager.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@
3232
* Register order is reloading order preventing unexpected behavior.
3333
*/
3434
public class ReloadManager {
35-
private final List<ReloadableContainer> registry = new ArrayList<>();
35+
private final List<ReloadableContainer> registry = Collections.synchronizedList(new LinkedList<>());
3636

3737
/**
3838
* Register a reloadable module into reloading registery
3939
*
4040
* @param reloadable Reloadable module
4141
*/
42-
public void register(@NotNull Reloadable reloadable) {
42+
public synchronized void register(@NotNull Reloadable reloadable) {
4343
unregister(reloadable);
4444
this.registry.add(new ReloadableContainer(new WeakReference<>(reloadable), null));
4545
}
@@ -49,7 +49,7 @@ public void register(@NotNull Reloadable reloadable) {
4949
*
5050
* @param reloadMethod Reloadable module
5151
*/
52-
public void register(@NotNull Method reloadMethod) {
52+
public synchronized void register(@NotNull Method reloadMethod) {
5353
unregister(reloadMethod);
5454
this.registry.add(new ReloadableContainer(null, new WeakReference<>(reloadMethod)));
5555
}
@@ -59,7 +59,7 @@ public void register(@NotNull Method reloadMethod) {
5959
*
6060
* @param reloadMethod Reloadable module
6161
*/
62-
public void unregister(@NotNull Method reloadMethod) {
62+
public synchronized void unregister(@NotNull Method reloadMethod) {
6363
this.registry.removeIf(reloadableContainer -> {
6464
if (reloadableContainer.getReloadableMethod() != null) {
6565
Method method = reloadableContainer.getReloadableMethod().get();
@@ -76,7 +76,7 @@ public void unregister(@NotNull Method reloadMethod) {
7676
*
7777
* @param reloadable Reloadable module
7878
*/
79-
public void unregister(@NotNull Reloadable reloadable) {
79+
public synchronized void unregister(@NotNull Reloadable reloadable) {
8080
this.registry.removeIf(reloadableContainer -> reloadableContainer != null && Objects.equals(reloadableContainer.getReloadable(), reloadable));
8181
}
8282

@@ -85,7 +85,7 @@ public void unregister(@NotNull Reloadable reloadable) {
8585
*
8686
* @param clazz Class that impl reloadable
8787
*/
88-
public void unregister(@NotNull Class<Reloadable> clazz) {
88+
public synchronized void unregister(@NotNull Class<Reloadable> clazz) {
8989
this.registry.removeIf(reloadable -> {
9090
if (reloadable.getReloadable() != null) {
9191
return clazz.equals(reloadable.getReloadable().getClass());
@@ -105,7 +105,7 @@ public void unregister(@NotNull Class<Reloadable> clazz) {
105105
* @return Reloading results
106106
*/
107107
@NotNull
108-
public Map<ReloadableContainer, ReloadResult> reload() {
108+
public synchronized Map<ReloadableContainer, ReloadResult> reload() {
109109
return reload(null);
110110
}
111111

@@ -116,7 +116,7 @@ public Map<ReloadableContainer, ReloadResult> reload() {
116116
* @return Reloading results
117117
*/
118118
@NotNull
119-
public Map<ReloadableContainer, ReloadResult> reload(@Nullable Class<Reloadable> clazz) {
119+
public synchronized Map<ReloadableContainer, ReloadResult> reload(@Nullable Class<Reloadable> clazz) {
120120
Map<ReloadableContainer, ReloadResult> reloadResultMap = new HashMap<>();
121121
Iterator<ReloadableContainer> iterator = this.registry.iterator();
122122
while (iterator.hasNext()) {

0 commit comments

Comments
 (0)