NotifyAll / SignalAll заставляет поток перестать работать должным образом - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь создать небольшую базу данных, которая может аутентифицировать пользователей, она хранится на моем Сервере, и указатель на нее хранится в каждом потоке, что делает ее одинаковой для всех потоков на сервере.Для регистрации пользователя я использую функцию, которая использует 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,Я забыл объявить метод как синхронизированный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...