zoukankan      html  css  js  c++  java
  • 多线程案例收集

    案例1:value++导致的不安全序列

    public class UnsafeSequence implements Runnable{
        protected int countDown = 10;
        private int value = 0;
        
        /**
         * 这里的value++事实上包含3步操作,读取value,给value+1,写入value。
         * 并发操作的时候,可能会同时读取,因此可能会返回相同的值,因此不是线程安全的,方法上加synchronized才行。 
         */
        public int getNext(){
            int x = value;
            Thread.yield();//为了让效果更明显,调用yield方法,主动让出进程
            x = x+1;
            value = x;
            return value;
    //        return value++;//这段代码效果等同于上面这段代码(但是本地运行不出这种效果),所以是线程不安全的
        }
    
        @Override
        public void run() {
            while(countDown-- >0){
                System.out.println(Thread.currentThread().getName()+":"+getNext());
            }
        }
        
        public static void main(String[] args) {
            UnsafeSequence us = new UnsafeSequence();
            Thread t1 = new Thread(us,"t1");
            Thread t2 = new Thread(us,"t2");
            t1.start();
            t2.start();
        }
    
    }
  • 相关阅读:
    epoll oneshot
    回望五月
    都知道的copy_from_user
    ixgbe 驱动 为xxx驱动做准备1
    面试问题集锦
    数据治理
    阅读
    hive 数据仓库面试题目集锦
    面试小问题集锦
    Scala学习笔记~尚硅谷学习视频
  • 原文地址:https://www.cnblogs.com/xujanus/p/4530314.html
Copyright © 2011-2022 走看看