Как создать одну нить перезарядки
Я нахожу способ сделать однопоточную перезарядку, но застрял. В классе, который управляет перезарядкой, я создал:
private HashMap<UUID,Integer> players = new HashMap<>();
//UUID = Player UUID
//Integer = Time in cooldown (Seconds)
public void run(){
for(UUID player : players){
//WHAT I NEED TO DO HERE?
if(//Time == 0){
players.remove(player);
}
}
}
Я не использовал IDE, надеюсь, я не пропустил ошибку, которую затмение подхватило бы.
Но как я могу получить целое число и сохранить его на секунду меньше?
1 ответ
TimeUnit используется для задержки процесса, так как он может быть использован следующим образом:
TimeUnit.SECONDS.sleep(1);
Это задержит текущий поток на одну секунду.
Я не буду предлагать использовать его, потому что ваша ситуация звучит так, как будто поток работает в фоновом режиме, и вы хотите подождать, пока он не закончится! Поэтому используйте новую функцию isAlive, которая может быть использована в (while
) петля.
редактировать
Если вы хотите отложить поток из другого потока поверх экземпляра, я бы предложил использовать метод sleep.
Пример:
myThread.sleep(1000);
Это задержит myThread
на одну секунду.
Редактировать № 2
Чтобы изменить значение для определенного ключа HashMap
, используйте метод put и get.
Пример:
// Get the time of a player and subtract it by one
Integer value = players.get(player) - 1;
// Update the value
players.put(player, value);
// If the time runs out, than delete the player
if (value == 0){
players.remove(player);
}