• Synchronized


    作用:能够保证在同一时刻最多有一个线程执行该段代码,以保证并发的安全性。(当第一个线程去执行该段代码的时候就拿到锁,并独占这把锁,当方法执行结束或者一定条件后它才释放这把锁,在没释放锁之前,所有的线程处于等待状态)

    不控制高并发的后果:

     预期值本来是20000,但是没有控制并发,所以结果不一样

    原因:

      i++,看上去知识一个操作,实际上包含了三个动作

      1,读取i

      2,将i加1

      3,将i的值写入到内存中

    出现结果与预期不一样的原因是当执行完第一个线程的时候,可能第二个线程就进入执行,就被打断了,结果还没有写入到内存中,(当i为5,第一个线程进入方法,将i+1 ,结果i=6,但是还没有写入,第二个线程就进去,它读到的值不是6,而是5,因为第一个线程还没有将i写入内存),这样是线程不安全的

    Synchronized的两种使用方法

    第一种使用方法:对象锁

    代码块形式:将关键字包裹方法体,this是锁,可以自己定义锁,可以定义多把锁Object object = new Object)

    方法锁形式:

    方法锁可以被多个对象拥有,他们之间互不影响,可以各自运行,也可以同时运行

     

    第二种使用方法:类锁

    用法和效果:类锁只能在同一时刻被一个对象拥有,而方法锁可以被多个对象拥有,他们之间互不影响,可以各自运行,也可以同时运行,而类锁只能是一个对象单独运行

    类锁第一种形式:静态方法锁(Synchronized加在static方法上)

    加了static

    没有加static

    当我们处理业务的时候,如果需要全局同步的时候,就可以使用静态方法锁,

    类锁第二种形式:.class形式

    使用了此代码块,所有的线程需要一个一个的排队访问

    生命不止,折腾不息
  • 相关阅读:
    android 源码
    android 保护
    电池信息 显示
    RGB、HSB、HSL 互相转换算法
    网页美工
    css 设计标准
    js 封闭 小结
    格式转换工具
    网页设计规范
    瀑布流分析
  • 原文地址:https://www.cnblogs.com/steakliu/p/10656171.html
Copyright © 2020-2023  润新知