Как создать одну нить перезарядки

Я нахожу способ сделать однопоточную перезарядку, но застрял. В классе, который управляет перезарядкой, я создал:

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);
}
Другие вопросы по тегам