java多线程 操作共享变量 保证原子性

java多线程 操作共享变量 保证原子性

背景:使用多线程统计所有员工每月考勤数据,第一次迟到警告,之后按照规则扣积分,使用AtomicInteger 配合AtomicMarkableReference 实现原子标记,保证所有线程可见,操作原子性

在现实业务场景中,不关心引用变量被修改了几次,只是单纯的关心是否更改过

public static void main(String[] args) {

AtomicInteger v1 =new AtomicInteger(0);

    AtomicInteger v2 =new AtomicInteger(1);

    AtomicMarkableReference stampedRef =new AtomicMarkableReference<>(v1, false);

    // 定义线程实现接口

    Runnable runnable =new Runnable(){

IdcardUtilscounter =new IdcardUtils();

        @Override

        public void run() {

counter.count(v1,v2,stampedRef);

        }

};

    // 启动10000个线程

    for(int i=0;i<10000;i++) {

new Thread(runnable).start();

    }

}

// 执行方法

public void count(AtomicInteger v1,AtomicInteger v2,AtomicMarkableReference stampedRef ) {

//java多线程 操作共享变量 保证原子性

    boolean flag = stampedRef.compareAndSet(v1, v2, false, true);

    if(flag){

System.out.println(Thread.currentThread().getName()+"--未产生标记,进行标记"+stampedRef.getReference());

    }else{

// System.out.println(Thread.currentThread().getName()+"--已经产生标记,不进行标记"+stampedRef.getReference());

    }

}



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1:jQuery节点创建与属性的处理 创建元素节点:可以有几种方式,后面会慢慢接触。常见的就是直接把这个节点的结构...
    码农小杨阅读 634评论 0 1
  • 看书时随手整理的jQuery的相关内容及API,之后会将相应的功能与JavaScript进行比对整理。 jQuer...
    Ginkela阅读 241评论 0 1
  • 1:$(document).ready 的作用是等页面的文档(document)中的节点都加载完毕后,再执行后续的...
    码农小杨阅读 359评论 0 1
  • 前言 暑假的时候虽然说学习过一遍jQuery了,但只是眼过一遍,熟悉了基本的使用并没有做记录,趁着学校这两天学校运...
    LongTean阅读 1,542评论 3 51
  • jQuery 函数整理 show(参数) hide(参数) html('参数')没有参数为获取值 text('参数...
    GodlinE阅读 294评论 0 1