AtomicInteger可以保证原子性,可见性,有序性

public class AtomicIntegerTest {

    private static AtomicInteger  value =  new AtomicInteger();

    public static void main(String[] args) throws InterruptedException {

        Thread t1 = new Thread(new LoopVolatile());
t1.start(); Thread t2 = new Thread(new LoopVolatile2());
t2.start(); t1.join();
t2.join();
System.out.println("final val is: " + value); //20000
} private static class LoopVolatile implements Runnable {
public void run() {
long val = ;
while (val < 10000L) {
value.getAndIncrement();
val++;
}
}
} private static class LoopVolatile2 implements Runnable {
public void run() {
long val = ;
while (val < 10000L) {
value.getAndIncrement();
val++;
}
}
}
}

getAndIncrement方法是线程安全的,是由Unsafe类来保证线程安全的。

public final int getAndIncrement() {
          return unsafe.getAndAddInt(this, valueOffset, 1);
}

AtomicInteger例子的更多相关文章

  1. Java中Atomic包的实现原理及应用

    1. 同步问题的提出 假设我们使用一个双核处理器执行A和B两个线程,核1执行A线程,而核2执行B线程,这两个线程现在都要对名为obj的对象的成员变量i进行加1操作,假设i的初始值为0,理论上两个线程运 ...

  2. JDK中的Atomic包中的类及使用

    引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作.原子变量的底层使用了处理器提供的原子指令,但是不同的CPU ...

  3. jdk源码阅读-ConcurrentLinkedQueue(一)

    说明 concurrentLinkedQueue为无界非阻塞队列,是线程安全的 内部结构为链表的形式, 内部使用cas保存线程安全.采用cas保证原子性 什么是CAS CAS 操作包含三个操作数 —— ...

  4. AtomicInteger源码分析

    问题背景 最近在看LinkedBlockingQueue看到了其中的count使用AtomicInteger修饰,之前也看过AtomicInteger的一些解释,也是似懂非懂的,今天深入的了解了其实现 ...

  5. AtomicInteger源码分析——基于CAS的乐观锁实现

    AtomicInteger源码分析——基于CAS的乐观锁实现 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时 ...

  6. AtomicInteger类保证线程安全的用法

    J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 ...

  7. Java自增原子性问题(测试Volatile、AtomicInteger)

    这是美团一面面试官的一个问题,后来发现这是一道面试常见题,怪自己没有准备充分:i++;在多线程环境下是否存在问题?当时回答存在,接着问,那怎么解决?...好吧,我说加锁或者synchronized同步 ...

  8. AtomicInteger的用法

    J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 ...

  9. AtomicInteger源码分析——基于CAS的乐观锁实

    1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换.切换涉及 ...

随机推荐

  1. .NET同一个页面父容器与子容器通信方案

    主界面: 关键主页面代码: <div id="EditDiv"> <iframe src="javascript:void(0)" id=&q ...

  2. 2.监控软件zabbix-服务端安装

    环境准备 Zabbix服务端环境要求: Red Hat Enterprise Linux CentOS Oracle Linux Debian Ubuntu 注意,要安装的Zabbix服务器需要联网, ...

  3. 6. [mmc subsystem] mmc core(第六章)——mmc core主模块

    一.说明 1.mmc core概述 mmc core主模块是mmc core的实现核心.也是本章的重点内容. 对应代码位置drivers/mmc/core/core.c. 其主要负责如下功能: mmc ...

  4. Linux rpm包管理工具

    1.什么是rpm包 是一种编译好的二进制软件包,安装速度快. 2.rpm包命名 el6:软件包用于在Red Hat 6.x, CentOS 6.x, and CloudLinux 6.x进行安装 el ...

  5. 006-OpenStack-配仪表盘

    OpenStack-配仪表盘 [基于此文章的环境]点我快速打开文章 计算节点安装(compute1) 1.安装 yum install openstack-dashboard -y &> ...

  6. Jenkins-Master-slave架构(八)

    一.增加slave节点 1.1 查看当前节点 系统管理-节点管理  1.2 新建节点  1.3 配置节点信息 可以选择只允许运行绑定到这台机器的job  1.4 保存后,使节点上线即可. 二.配置任务 ...

  7. 使用GCP_EC2云服务器搭部署网络服务

    首先,在此阿里云/腾讯云/华为云购买一个云服务器推荐使用阿里云的 首先链接你的VPS,可以使用X-shell / Putty / SecureCRTPortable 等SSH链接工具 注意:如果不知道 ...

  8. 201871010104-陈园园 《面向对象程序设计(java)》第十四周学习总结

    201871010104-陈园园 <面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  9. XSS-Stored

    存储型XSS (持久性XSS) 将恶意JavaScript代码存储在数据库,当下次用户浏览的时候执行 Low <?php if( isset( $_POST[ 'btnSign' ] ) ) { ...

  10. SpringBoot设置支持跨域请求

    跨域:现代浏览器出全的考虑,在http/https请求时必须遵守同源策略,否则即使跨域的http/https 请求,默认情况下是被禁止的,ip(域名)不同.或者端口不同.协议不同(比如http.htt ...