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

      

 

posted @ 2021-04-21 06:54  那种意境  阅读(47)  评论(0编辑  收藏  举报