• java统计当前在线数


    package com.hnedu.stat;
    /**
    * 计算在线人数,说明:
    *
    * 在访问页面放入:
    * com.hnedu.stat.OnlineCounter.addUser(Object object)
    * 一般用ip来作为object的传入值,当然,如果网站统计登陆在线人数,也可用用户名
    * 来作为object传入值。
    *
    * 调用显示在线人数
    * com.hnedu.stat.OnlineCounter.getOnlineCount() *
    *
    * com.hnedu.stat.OnlineCounter.getOnline()
    * 返回一个List,里面以String[]形式存放传入的object值和最后访问页面时间。
    * by crazyren 2003-08-05 email: c_crazyren@hotmail.com
    */
    import java.util.List;
    import java.util.ArrayList;
    import javax.servlet.http.HttpSession;
    public class OnlineCounter {
    private static List list = new ArrayList();

    private OnlineCounter() {
    }
    public static void addUser(Object object) {
    //得到用户当前访问时间
    String nowtime = com.hnedu.util.StringUtils.getTime("mm:ss");
    //Str数组用来存放用户得ip和访问时间
    String[] str = new String[2];
    str[0] = object.toString();
    str[1] = nowtime;

    //temp数组用来临时存放从list里面取出的用户ip和访问时间
    String[] temp = new String[2];

    //循环list
    for (int i = 0; i < list.size(); i++) {
    temp = (String[])list.get(i);
    //如果从list里面取出的用户ip和str里面存放的ip相同,则更新访问时间
    if(temp[0].equals(str[0])) {
    list.set(i,str);
    return;
    }
    //如果用户超过5分钟没有访问,则认为不在线
    if(subTime(nowtime,temp[1]) > 300) {
    list.remove(i);
    }
    }
    //添加一个新的在线用户
    list.add(str);
    //释放资源
    str = null;temp = null;
    }

    public static int getOnlineCount() {
    //返回当前在线人数
    return list.size();
    }

    public static List getOnline() {
    return list;
    }
    /** 计算两个时间差,返回相差秒数 */
    private static int subTime(String src,String des) {
    int n = 0;
    java.util.Calendar ca = java.util.Calendar.getInstance();
    long time1 =
    com.hnedu.util.StringUtils.compareStringTime(src,des,"mm:ss");
    ca.setTimeInMillis(time1);
    n = (ca.get(java.util.Calendar.MINUTE)) * 60;
    n = n + ca.get(java.util.Calendar.SECOND);
    return n;
    }
    }



    引用的StringUtils里面的两个方法:

    /**
    * 获得当前时间
    *
    @param parrten 输出的时间格式
    *
    @return 返回时间
    */
    public static String getTime(String parrten)
    {
    String timestr;
    if(parrten==null||parrten.equals(""))
    {
    parrten="yyyyMMddHHmmss";
    }
    java.text.SimpleDateFormat sdf=new SimpleDateFormat(parrten);
    java.util.Date cday=new Date();
    timestr=sdf.format(cday);
    return timestr;
    }

    /**
    * 比较两个字符串时间的大小
    *
    @param t1 时间1
    *
    @param t2 时间2
    *
    @param parrten 时间格式 :yyyy-MM-dd
    *
    @return 返回long =0相等,>0 t1>t2,<0 t1<t2
    */
    public static long compareStringTime(String t1,String t2,String parrten)
    {
    SimpleDateFormat formatter = new SimpleDateFormat (parrten);
    ParsePosition pos = new ParsePosition(0);
    ParsePosition pos1 = new ParsePosition(0);
    Date dt1=formatter.parse(t1,pos);
    Date dt2=formatter.parse(t2,pos1);
    long l=dt1.getTime()-dt2.getTime();
    return l;
    }
  • 相关阅读:
    并发数据库事务缺锁导致的数据不一致情况:丢失更新,脏读,不可重复读,幻读
    Spring boot 如何读取jar包外面的properties文件
    安卓自定义组合控件--toolbar
    [转]ThoughtWorks(中国)程序员读书雷达
    [转]Design Pattern Interview Questions
    [转]Design Pattern Interview Questions
    [转]Design Pattern Interview Questions
    [转]Design Pattern Interview Questions
    OpenCV 使用C++获取摄像头数据并保存示例
    [原]opencv图像裁剪
  • 原文地址:https://www.cnblogs.com/chunxi/p/2237837.html
Copyright © 2020-2023  润新知