Я пытаюсь создать небольшую базу данных, которая может аутентифицировать пользователей, она хранится на моем Сервере, и указатель на нее хранится в каждом потоке, что делает ее одинаковой для всех потоков на сервере.Для регистрации пользователя я использую функцию, которая использует await и signalAll, но код «останавливается» на signalAlland, больше ничего не делается.
Я пытался изменить await и signalAll на условия, эквивалентные wait и notifyAll, и ничего, также попытался изменить signalAll на сигнал, и он все еще висит там.
public void registerUser(String email,String password){
while(!canLogin){
try{
loginCondition.await();
}
catch (Exception e){}
}
canLogin=false;
this.userlist.put(email,new User(email,password));//This runs since I can login with the account after restarting the client
canLogin=true;
//System.out.pritnln("Starting Signal"); <----- This runs
loginCondition.signalAll(); //Stops working here
//System.out.pritnln("After Signal"); <----- This doesn't
}
Из-за этого ни один поток не просыпается после него, если они ждут.
РЕДАКТИРОВАТЬ: Как сказал @Slaw,Я забыл объявить метод как синхронизированный.