文档章节

JAVA原子性操作

caiz
 caiz
发布于 2016/06/02 21:20
字数 265
阅读 89
收藏 1

java 原子性操作

Java中的原子操作包括: 1)除long和double之外的基本类型的赋值操作

2)所有引用reference的赋值操作

3)java.concurrent.Atomic.* 包中所有类的一切操作

count++不是原子操作,是3个原子操作组合

1.读取主存中的count值,赋值给一个局部成员变量tmp 2.tmp+1 3.将tmp赋值给count

要使用AtomicInteger.getAndIncrement()才可以避免并发问题

原子性操作与加锁实例:

package com.yy.ent.antiad.common.util;
import java.util.concurrent.atomic.AtomicInteger;
/**
 * 原子性自增与加锁方式对比
 * @author huangyucai1@yy.com
 * @since 2016-6-2
 */
public class AtomicTest {
    private int value;

    public AtomicTest(int value){
        this.value = value;
    }

    public synchronized int increase(){
        return value++;
    }

    public int getValue(){
        return value;
    }

    public static void main(String args[]){
        long start = System.currentTimeMillis();

        AtomicTest test = new AtomicTest(0);
        for( int i=0;i< 100000000;i++){
            test.increase();
        }
        long end = System.currentTimeMillis();
        System.out.println(test.getValue()+" times increase synchronize time cost:"+(end -start)+" ms");

        start = System.currentTimeMillis();
        AtomicInteger atomic = new AtomicInteger(0);

        for(int i=0;i< 100000000;i++){
            atomic.incrementAndGet();
        }
        end = System.currentTimeMillis();
        System.out.println(atomic.intValue() +" times increase atomic time cost:"+(end - start)+" ms" );
    }

}

运行结果

100000000 times increase synchronize time cost:2857 ms

100000000 times increase atomic time cost:1033 ms

© 著作权归作者所有

上一篇: Java logback配置
caiz
粉丝 0
博文 25
码字总数 11583
作品 0
广州
私信 提问
关于Java中的原子性、可见性

关于Java中的原子性、可见性的学习 当然原子性、可见性不仅限于Java的并发编程中,这三种性质的问题是在所有并发编程中普遍拥有的。 原子性 在Java中,对基本数据的读取与赋值操作是原子性的...

StupidZhe
2017/11/23
0
0
java多线程详解一线程的内存模型和线程特性

这几天面试互联网公司的高级java工程师,多线程问的相对而言比较多。所以,从各种角度来看看java中多线程的实现方式。 一.Java多线程中的内存模型 1.java主内存和工作内存 根据java内存模型,...

onedotdot
2018/07/14
0
0
关于JVM中long和double的读取原子性

今天看《Java并发编程实战》的书中,关于long和double的原子性有这么一段话,意思就是在JVM中,对于32位(或者以下)的数值变量都是原子性读写,但是对于long和double这种64位的操作是非原子...

Lubby
2015/11/20
0
0
求你了,再问你Java内存模型的时候别再给我讲堆栈方法区了…

GitHub 4.1k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 4.1k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 4.1k Star 的Java工程师成神之路 ,真的确定不来了解一下吗...

Hollis
07/02
0
0
再有人问你Java内存模型是什么,就把这篇文章发给他!

前几天,发了一篇文章,介绍了一下JVM内存结构、Java内存模型以及Java对象模型之间的区别。有很多小伙伴反馈希望可以深入的讲解下每个知识点。Java内存模型,是这三个知识点当中最晦涩难懂的...

技术小能手
2018/09/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

海康威视Web3.0控件个人开发经验及问题总结(转)

最近在给公司平台写视频监控的页面需求,于是接触到了海康威视的视频控件,网上查阅一番资料后,发现有很多大佬们给出了简易的海康视频控件的上手方法,但是发现仍然有很多地方没有总结到,于...

west_coast
21分钟前
1
0
spring boot入门,看这篇文章就够了

一、SpringBoot入门 1、基本介绍 简化Spring应用开发的一个框架、整个Spring技术栈的一个大整合; J2EE开发的一站式解决方案; 优点: 快速创建独立运行的Spring项目以及与主流框架集成; 使...

李红欧巴
25分钟前
2
0
solidity智能合约implicit conversion异常

问题场景 在使用^0.5.10版本的solidity时,如果使用this关键字会出现以下问题。 代码: require(tokenContract.balanceOf(this) >= _numberOfTokens);(issue is here) 错误信息: TypeErro...

程序新视界
28分钟前
1
0
Null value appeared in non-nullable field java.lang.NullPointerException

报错 Null value appeared in non-nullable fieldjava.lang.NullPointerException: Null value appeared in non-nullable field: top level row objectIf the schema is inferred from a......

张欢19933
34分钟前
0
0
【百度飞浆AI Studio】2、感性快速体验深度学习的线性归回预测房价

百度学习原文地址: https://www.paddlepaddle.org.cn/documentation/docs/zh/1.5/beginners_guide/basics/fit_a_line/README.cn.html import paddleimport paddle.fluid as fluidimport n......

-个俗人
34分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部