可重入锁是什么?

可以防止死锁,是同一把锁

代码:
package com.javaliao.backstage; class Phone{ public synchronized void
sendSMS(){ System.out.println(Thread.currentThread().getName()+"\t 发短信");
sendEmail(); } public synchronized void sendEmail(){
System.out.println(Thread.currentThread().getName()+"\t 发邮件"); } } public class
Demo { public static void main(String[] args) { Phone phone = new Phone(); new
Thread(()->{ phone.sendSMS(); },"t1").start(); new Thread(()->{
phone.sendSMS(); },"t2").start(); } }
控制台:

生活案例:

家里的大门有一把锁,厕所没有上锁。我进了大门了,就不用在厕所上锁了。

ReentrantLock就是把可重入锁
package com.javaliao.backstage; import java.util.concurrent.locks.Lock; import
java.util.concurrent.locks.ReentrantLock; class Phone implements Runnable{ Lock
lock = new ReentrantLock(); @Override public void run() { sendSMS(); } public
void sendSMS(){ //加几把就要解锁几次 lock.lock(); lock.lock(); try {
System.out.println(Thread.currentThread().getName()+"\t 发短信"); sendEmail(); }
finally { lock.unlock(); lock.unlock(); } } public void sendEmail(){
lock.lock(); try { System.out.println(Thread.currentThread().getName()+"\t
发邮件"); } finally { lock.unlock(); } } } public class Demo { public static void
main(String[] args) { Phone phone = new Phone(); Thread t1 = new
Thread(phone,"t1"); Thread t2 = new Thread(phone,"t2"); t1.start(); t2.start();
} }

 

 

 

 

 

 

技术
©2019-2020 Toolsou All rights reserved,
MySQL触发器你所不知道的谷歌浏览器 console.log打印技巧3 4j不是合法的python表达式_3+4j不是合法的Python表达式。VHDL——JK触发器算法设计与分析(回溯)登录模块测试用例java 字符串从后向前_Java String字符串总结【linux】shell:简单的shell脚本练习(超详细)Eclipse使用教程——使用Eclipse创建第一个HelloWorld!2021年——第十二届蓝桥杯大赛软件赛国赛C/C++ 大学 C 组