多线程之synchronoized实现可重入锁
2021-03-20 12:26
标签:成功 png 结果 关键字 模式 应该 场景 ima 获取 1.什么是可重入锁: 当一个线程A去请求其他线程所持有的对象锁时,线程A就会被阻塞; 但是,当线程A去请求自己持有的对象锁时,如果该对象锁是可重入锁,那么请求就会成功,否则也会发生阻塞; 2.用可重入锁有什么用: 简单说,就是为了使线程可以获取自己的内部锁; 比如,假如一个线程A获取了对象X的对象锁,在线程A未释放锁X之前,当再次请求对象锁X时,如果该对象锁X不是 可重入锁,那么就会发生死锁的情况,否则请求成功; ------上代码------ 输出结果: to our:在一个已经被synchronized关键字修饰过的方法再去调用对象中其他被synchronized修饰的方法: 线程main在执行到 3.可重入锁可以避免死锁: 假如有一个场景:用户名和密码保存在本地文件中,则登录验证方法和更新密码方法都应该被加synchronized,那么当更新密码的时候需要验证密码的合法性,所以需要调用验证方法,此时是可以调用的,否则就会发生死锁; 4.可重入锁的其他特性: 支持父子类继承的环境中; 其他: synchronized其他特性: a.出现异常时,锁自动释放; b.将任意对象作为监视器; c.单例模式--双重锁校验: ---上代码--- 多线程之synchronoized实现可重入锁 标签:成功 png 结果 关键字 模式 应该 场景 ima 获取 原文地址:https://www.cnblogs.com/fighttoforever/p/13925563.htmlmet1()
内部的时候,由于该线程已经获取了该对象syncLock
的对象锁,当执行到调用met2()
的时候,会再次请求该对象的对象锁,如果没有可重入锁机制的话,由于该线程T还未释放在刚进入met1()
时获取的对象锁,当执行到调用met2()
的时候,就会出现死锁。
上一篇:Spring-AOP
下一篇:快速排序
文章标题:多线程之synchronoized实现可重入锁
文章链接:http://soscw.com/index.php/essay/66702.html