zoukankan      html  css  js  c++  java
  • 8.volatile原子性

    原子性    

        1.一个操作是不可中断的,即使多个线程在一起执行的时候,一旦操作执行开始,就不会被其他的线程干扰执行并导致执行中断。
        2.对于静态变量int ,2个线程同时对它进行修改,线程a对它修改为10,线程b对它修改为15,a、b线程之间是没有干扰的,最后的结果要么是10或者15。
        3.非原子性操作时,都会存在线程安全问题,所以需要同步技术synchronized使操作变成原子性,一个操作是原子性操作,那么它就具有原子性。
    volatile
        1.关键字虽然拥有多个线程之间的可见性,但是却不具有同步性(也就是原子性)。
        2.轻量的(synchronized),性能要比(synchronized)强很多,不会造成线程阻塞(在很多开源的框架中,底层代码都是大量使用volatile)。
        3.volatile用于针对多个线程的变量具有可见性,并不能代替synchronized同步功能。
        
    1. package demo1;
    2. import java.util.concurrent.atomic.AtomicInteger;
    3. /**
    4. * Created by liudan on 2017/7/2.
    5. */
    6. public class MyThread_volatile2 extends Thread{
    7. private static volatile int count;
    8. /*AtomicInteger:使用步长一次性加10*/
    9. private static void addCount(){
    10. for (int i=0;i<1000;i++){
    11. count++;
    12. }
    13. System.err.println(count);
    14. }
    15. @Override
    16. public void run() {
    17. addCount();
    18. }
    19. public static void main(String[] args){
    20. MyThread_volatile2[] myThread_volatile2 = new MyThread_volatile2[10];
    21. for (int i=0;i<myThread_volatile2.length;i++){
    22. myThread_volatile2[i] = new MyThread_volatile2();
    23. }
    24. for (int i=0;i<10;i++){
    25. myThread_volatile2[i].start();
    26. }
    27. }
    28. }
    29. 输出:
    30. 1000 2000 3000 4000 5309 6716 7716 5716 8716 9716



  • 相关阅读:
    Educational Codeforces Round 6
    Educational Codeforces Round 5
    [Educational Round 5][Codeforces 616F. Expensive Strings]
    [Codeforces Round #508 (Div. 2)][Codeforces 1038E. Maximum Matching]
    Codeforces Round #509 (Div. 2)
    从零开始编写一个vue插件
    Web前端错题模糊题记录
    vue中响应式props办法
    vue中router-link的click事件失效的解决办法
    ubuntu修改顶栏颜色
  • 原文地址:https://www.cnblogs.com/xxt19970908/p/7302410.html
Copyright © 2011-2022 走看看