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方法释放锁。

          

  • 相关阅读:
    bzoj4537: [Hnoi2016]最小公倍数
    bzoj4331: JSOI2012 越狱老虎桥
    bzoj4558: [JLoi2016]方
    bzoj4209: 西瓜王
    bzoj2653: middle
    bzoj4671: 异或图
    bzoj4771: 七彩树
    shell java应用启动脚本(app.sh)
    Springboot 构建http服务,返回的http行是'HTTP/1.1 200' 无状态码描述 客户端解析错误
    MariaDB(Mysql)-主从搭建
  • 原文地址:https://www.cnblogs.com/blogofzxf/p/14683393.html
Copyright © 2011-2022 走看看