zoukankan      html  css  js  c++  java
  • java知识学习38-线程安全

    多线程安全:多线程访问了共享的资源,就会产生线程安全问题。

      原理:因为多线程会同时对一个资源操作,就会造成数据混乱。比如对同一个数据进行加1操作,三个线程同时对它操作,可能就会出现三次加1是对同一个值也就只是加1的效果,而不是加3的效果。

    解决线程安全问题:Java引进了线程同步机制。

      

      有三种方式完成同步操作:1.同步代码块;2.同步方法;3.Lock锁机制。

      1、同步代码块:synchronized关键字可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。

        如图,“同步锁”即锁对象作用:就是把同步代码块锁住,只让一个线程在同步代码块运行。

        

        代码效果:1、创建一个对象锁;2、对同步代码加上synchronized关键字修饰并传入对象锁。

           

        同步锁原理分析:

          

      2、同步方法:使用synchronized修饰的方法就叫同步方法,保证一个线程执行该方法的时候,其他线程只能在方法外等着。

        

        使用步骤:1、把访问了共享资源的代码抽取出来,放到一个方法中;2、在方法上添加synchronized关键字修饰符 

            

      3、Lock锁机制:锁机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作,同步代码块/同步方法具有的功能Lock都有,且更强大和更体现面向对象。

        

        使用步骤:

          1、在类的成员位置创建一个Lock的实现类(如ReentrantLock)对象;

          2、在可能出现线程安全问题的代码前调用Lock接口中的luck方法获取锁;

          3、在可能出现线程安全问题的代码后调用Lock接口中的unluck方法释放锁。

          

  • 相关阅读:
    Python、Lua和Ruby比较——脚本语言大P.K.
    vim 设置默认显示行号
    C语言
    How To Add Swap on Ubuntu 14.04
    How To Install Apache Kafka on Ubuntu 14.04
    php的错误和异常处理
    md5sum
    大牛的博客
    【转】4G手机打电话为什么会断网 4G上网和通话不能并存原因分析
    【转】女人最想要的是什么
  • 原文地址:https://www.cnblogs.com/blogofzxf/p/14683393.html
Copyright © 2011-2022 走看看