1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-19 19:25:48 +00:00

Switch to a Concurrent Map

This commit is contained in:
TheBusyBiscuit 2021-05-24 11:18:13 +02:00
parent a249ca7848
commit 466990a03e

View File

@ -1,9 +1,7 @@
package io.github.thebusybiscuit.slimefun4.core.machines; package io.github.thebusybiscuit.slimefun4.core.machines;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -35,8 +33,7 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
*/ */
public class MachineProcessor<T extends MachineOperation> { public class MachineProcessor<T extends MachineOperation> {
private final ReadWriteLock lock = new ReentrantReadWriteLock(); private final Map<BlockPosition, T> machines = new ConcurrentHashMap<>();
private final Map<BlockPosition, T> machines = new HashMap<>();
private final MachineProcessHolder<T> owner; private final MachineProcessHolder<T> owner;
private ItemStack progressBar; private ItemStack progressBar;
@ -98,7 +95,7 @@ public class MachineProcessor<T extends MachineOperation> {
*/ */
public boolean startOperation(@Nonnull Location loc, @Nonnull T operation) { public boolean startOperation(@Nonnull Location loc, @Nonnull T operation) {
Validate.notNull(loc, "The location must not be null"); Validate.notNull(loc, "The location must not be null");
Validate.notNull(operation, "The machine operation cannot be null"); Validate.notNull(operation, "The operation cannot be null");
return startOperation(new BlockPosition(loc), operation); return startOperation(new BlockPosition(loc), operation);
} }
@ -136,13 +133,7 @@ public class MachineProcessor<T extends MachineOperation> {
Validate.notNull(pos, "The BlockPosition must not be null"); Validate.notNull(pos, "The BlockPosition must not be null");
Validate.notNull(operation, "The machine operation cannot be null"); Validate.notNull(operation, "The machine operation cannot be null");
lock.writeLock().lock(); return machines.putIfAbsent(pos, operation) == null;
try {
return machines.putIfAbsent(pos, operation) == null;
} finally {
lock.writeLock().unlock();
}
} }
/** /**
@ -189,13 +180,7 @@ public class MachineProcessor<T extends MachineOperation> {
public T getOperation(@Nonnull BlockPosition pos) { public T getOperation(@Nonnull BlockPosition pos) {
Validate.notNull(pos, "The BlockPosition must not be null"); Validate.notNull(pos, "The BlockPosition must not be null");
lock.readLock().lock(); return machines.get(pos);
try {
return machines.get(pos);
} finally {
lock.readLock().unlock();
}
} }
/** /**
@ -240,15 +225,7 @@ public class MachineProcessor<T extends MachineOperation> {
public boolean endOperation(@Nonnull BlockPosition pos) { public boolean endOperation(@Nonnull BlockPosition pos) {
Validate.notNull(pos, "The BlockPosition cannot be null"); Validate.notNull(pos, "The BlockPosition cannot be null");
lock.writeLock().lock(); T operation = machines.remove(pos);
T operation;
try {
operation = machines.remove(pos);
} finally {
lock.writeLock().unlock();
}
if (operation != null) { if (operation != null) {
/* /*