我正在尝试创建一个能够对用户进行身份验证的小型数据库,该数据库存储在我的服务器中,并且指向它的指针存储在每个线程中,从而使服务器上的所有线程都相同。 要注册用户,我使用了一个使用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所说,我忘记声明该方法为已同步。