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:
parent
a249ca7848
commit
466990a03e
@ -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) {
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user