码迷,mamicode.com
首页 > 编程语言 > 详细

多线程之synchronoized实现可重入锁

时间:2020-11-04 19:10:26      阅读:27      评论:0      收藏:0      [点我收藏+]

标签:成功   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!