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();
        }
    
    }
  • 相关阅读:
    C#Web网站的创建
    C#Repeater控件的使用
    C#LINQ
    C#异常处理
    C#LINQ
    C#匿名委托,匿名函数,lambda表达式
    C#chart图表的应用
    C#用户控件的使用
    用 Python写 daemon
    CentOS 5.4 制作 Python 2.6 RPM 包的方法
  • 原文地址:https://www.cnblogs.com/xujanus/p/4530314.html
Copyright © 2011-2022 走看看