多线程之synchronoized实现可重入锁

2021-03-20 12:26

阅读:557

标签:成功   png   结果   关键字   模式   应该   场景   ima   获取   

1.什么是可重入锁:

  当一个线程A去请求其他线程所持有的对象锁时,线程A就会被阻塞;

  但是,当线程A去请求自己持有的对象锁时,如果该对象锁是可重入锁,那么请求就会成功,否则也会发生阻塞;

2.用可重入锁有什么用:

  简单说,就是为了使线程可以获取自己的内部锁;

  比如,假如一个线程A获取了对象X的对象锁,在线程A未释放锁X之前,当再次请求对象锁X时,如果该对象锁X不是

  可重入锁,那么就会发生死锁的情况,否则请求成功;

  ------上代码------

  技术图片

 

输出结果:

  技术图片

 

to our:在一个已经被synchronized关键字修饰过的方法再去调用对象中其他被synchronized修饰的方法:

     线程main在执行到met1()内部的时候,由于该线程已经获取了该对象syncLock 的对象锁,当执行到调用met2() 的时候,会再次请求该对象的对象锁,如果没有可重入锁机制的话,由于该线程T还未释放在刚进入met1() 时获取的对象锁,当执行到调用met2() 的时候,就会出现死锁。

3.可重入锁可以避免死锁:

   假如有一个场景:用户名和密码保存在本地文件中,则登录验证方法和更新密码方法都应该被加synchronized,那么当更新密码的时候需要验证密码的合法性,所以需要调用验证方法,此时是可以调用的,否则就会发生死锁;

 

4.可重入锁的其他特性:

  支持父子类继承的环境中;

其他:

  synchronized其他特性:

    a.出现异常时,锁自动释放;

    b.将任意对象作为监视器; 

    c.单例模式--双重锁校验:

      ---上代码---

      技术图片

 

 

       

 

 

多线程之synchronoized实现可重入锁

标签:成功   png   结果   关键字   模式   应该   场景   ima   获取   

原文地址:https://www.cnblogs.com/fighttoforever/p/13925563.html

上一篇:Spring-AOP

下一篇:快速排序


评论


亲,登录后才可以留言!