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,其锁的对象是该方法的类对象。
线程不是太多可以用这个方法,线程太多用这个可能慢了些,好像加锁比较耗时间,如果同一个时间太多人进行登入操作,都得在那等着,一个一个进行,反应慢