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();
        }
    
    }
  • 相关阅读:
    2018常用DOM操作总结
    emlog实现全站pjax无刷新加载页面
    深入理解Vuex 框架
    2018前端最火的web UI框架
    小程序快递单号查询
    表单元素系列二
    表单元素系列一
    表单提交
    AJAX 回调函数刷新页面问题
    electron 常用命令
  • 原文地址:https://www.cnblogs.com/xujanus/p/4530314.html
Copyright © 2011-2022 走看看