锁加单例:
public class Regist{
private static Regist rgst=new Regist();
private Regist(){}
private int cnt=0;
private int max=100;
public static getRegist(){return rgst;}
///设置最大上线人数
public void setMax(int max){this.max=max;}
///判断新用户能否登入
public synchronized boolean login(){
if(cnt>=max)return false;
++cnt;
return true;
}
///用户退出时调用
public synchronized void logout(){
--cnt;
}
};
有新用户要登入时,先Regist::getRegist().login()判断能否登入,返回true则表示没到用户上限,可以登入,否则表示到上限了,不能登入,用户退出时需要调用Regist::getRegist().logout()
synchronized不清楚可以百度,是种类似锁的东西。作用于方法上,相当于调用方法前先lock,调用之后unlock,其锁的对象是该方法的类对象。
线程不是太多可以用这个方法,线程太多用这个可能慢了些,好像加锁比较耗时间,如果同一个时间太多人进行登入操作,都得在那等着,一个一个进行,反应慢