NotifyAll / SignalAll使线程停止正常工作

时间:2018-12-22 17:36:34

标签: java concurrency

我正在尝试创建一个能够对用户进行身份验证的小型数据库,该数据库存储在我的服务器中,并且指向它的指针存储在每个线程中,从而使服务器上的所有线程都相同。 要注册用户,我使用了一个使用await和signalAll的函数,但是代码在signalAlland处“停止”了。

我试图将await和signalAll更改为等效于wait和notifyAll的条件,并且什么也没有尝试,还尝试将signalAll更改为signal,但仍然挂在那里。

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所说,我忘记声明该方法为已同步。

0 个答案:

没有答案