91名师指路-头部
91名师指路

java ReentrantLock 可重入锁(也叫递归锁)

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

可重入锁:

指的是同一线程外层函数获得锁之后,内存递归函数仍然能获取该所的代码,在同一个线程的外层方法获取锁的时候,在进入内层方法会自动获取锁也就是说:线程可以进入任何一个它已经拥有的锁所同步着的代码块。看完官方的解释后你是不是很蒙蔽,给大家举个例子就明白了:相当于我们只要拿到我们进入家里大门的钥匙(锁)后,就可以进入各个房间,而不用在去获取各个房间的钥匙(锁)。


备注:ReentrantLock和synchronized就是一个典型的可重入锁。


(1)证明Synchronized是可重入锁。

代码如下:

package com.mszl.thread;

/**
* 功能:验证Synchronized为可重入锁
* 备注:更多资料请访问 http://www.91mszl.com
* @author bobo teacher
*/

class user{

public synchronized void sendSms(){
System.out.println(Thread.currentThread().getName() + " 发送短信");
this.sendEmail();
}

public synchronized void sendEmail(){
System.out.println(Thread.currentThread().getName() + " 发送邮件");
}

}


public class SynchronizedDemo {

public static void main(String[] args) {
user u=new user();

Thread t1=new Thread(new Runnable() {
@Override
public void run() {
u.sendSms();
}
});
t1.start();


Thread t2=new Thread(new Runnable() {
@Override
public void run() {
u.sendSms();
}
});
t2.start();
}


}


执行结果:

Thread-0 发送短信
Thread-0 发送邮件
Thread-1 发送短信
Thread-1 发送邮件


(2)证明ReentrantLock可重入锁。

代码如下:

package com.mszl.thread;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
* 功能:验证ReentrantLock为可重入锁
* 备注:更多资料请访问 http://www.91mszl.com
* @author bobo teacher
*/
class reent {

Lock lock = new ReentrantLock();

public void sendSms(){
lock.lock();
try{
System.out.println(Thread.currentThread().getName() + " 发送短信");
this.sendEmail();
} catch(Exception ex){
ex.printStackTrace();
} finally{
lock.unlock();
}
}

public void sendEmail(){
lock.lock();
try{
System.out.println(Thread.currentThread().getName() + " 发送邮件");
} catch(Exception ex){
ex.printStackTrace();
} finally{
lock.unlock();
}
}

}

public class ReentrantLockDemo {

public static void main(String[] args) {
reent u=new reent();

Thread t1=new Thread(new Runnable() {
@Override
public void run() {
u.sendSms();
}
});
t1.start();

Thread t2=new Thread(new Runnable() {
@Override
public void run() {
u.sendSms();
}
});
t2.start();
}


}


执行结果:

Thread-0 发送短信
Thread-0 发送邮件
Thread-1 发送短信
Thread-1 发送邮件


2019-11-26 22:38:05     阅读(1005)

名师出品,必属精品    https://www.91mszl.com

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部