zoukankan      html  css  js  c++  java
  • 关于高并发的aotomic

    AtomicInteger线程安全的根源,熟悉并发的同学一定知道在java中处理并发主要有两种方式:

    1,synchronized关键字,这个大家应当都各种面试和笔试中经常遇到。

    2,volatile修饰符的使用,相信这个修饰符大家平时在项目中使用的也不是很多。

    这里重点说一下volatile:

    Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存重新读取该成员的值,而且,当成员变量值发生变化时,强迫将变化的值重新写入共享内存,这样两个不同的线程在访问同一个共享变量的值时,始终看到的是同一个值。

    java语言规范指出:为了获取最佳的运行速度,允许线程保留共享变量的副本,当这个线程进入或者离开同步代码块时,才与共享成员变量进行比对,如果有变化再更新共享成员变量。这样当多个线程同时访问一个共享变量时,可能会存在值不同步的现象。

    而volatile这个值的作用就是告诉VM:对于这个成员变量不能保存它的副本,要直接与共享成员变量交互。

    建议:当多个线程同时访问一个共享变量时,可以使用volatile,而当访问的变量已在synchronized代码块中时,不必使用。

    缺点:使用volatile将使得VM优化失去作用,导致效率较低,所以要在必要的时候使用。

  • 相关阅读:
    位移算数符
    蓝桥杯 错误票据(第四届预赛第7题)
    hdu Train Problem I(栈的简单应用)
    ACM YTU 2018 母牛的故事
    ACM YTU 1012 u Calculate e
    C 语言 printf格式控制详解
    ACM YTU 十进制与八进制的转换 (栈和队列) STL栈调用
    ACM HDU 2044 一只小蜜蜂
    ACM YTU 挑战编程 字符串 Problem A: WERTYU
    ACM HDU 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/mengziHEHE/p/3236313.html
Copyright © 2011-2022 走看看