栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

通过Java中CAS思想实现记录网页访问量

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过Java中CAS思想实现记录网页访问量

简述CAS

CAS,compare and swap的缩写,中文翻译成比较并替换。它是乐观锁的一种体现,CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。 如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值 。否则,处理器不做任何操作。类似于这种操作:update table set q = 2 where q = 1


代码实现
// 使用volatile修饰visitsNum的值,保证线程操作时内存的可见性
private volatile long visitsNum;

// 结合synchronized定义CAS方法,把锁的颗粒度变小,已提升性能
private boolean cas(long A, long B) {
    // 如果当前visitsNum的值与预期的A值一样,就把当前的visitsNum值替换为B值
    synchronized (this) {
        if (visitsNum == A) {
            visitsNum = B;
            return true;
        } else {
            return false;
        }
    }
}

// 自增方法
public long autoincrement() {
    long oldValue;
    long newValue;
    do {
        oldValue = visitsNum;
        newValue = oldValue + 1;
    } while (!cas(oldValue, newValue));
    return newValue;
}

测试结果
public static void main(String[] args) {
    HtmlCounterCAS htmlCounterCAS = new HtmlCounterCAS();
    for (int i = 0; i < 1000; i++) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(htmlCounterCAS.autoincrement());
            }
        }).start();
    }
}

 如图所示

 本文只是个小demo,实际中要真正实现网页访问,要考虑的因素还是有很多,如限制IP在一定的时间内访问数次,怎么防止代理IP刷访问量.....

欢迎留言沟通

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007260.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号