可重入锁
指的是同一线程外层函数获得锁之后,内层递归函数仍能获取该锁的代码,在同一线程的外层获取锁的时候,在进入内层方法会自动获取锁,也就是说线程可以任意进入它已经拥有的锁的同步代码块。
synchronized 是一个典型的重入锁
使用synchronized 实现代码如下:
public class ReenterLockDemo {
public static void main(String[] args) {
Phone phone = new Phone();
new Thread(new Runnable() {
@Override
public void run() {
try {
phone.sendSMS();
} catch (Exception e) {
e.printStackTrace();
}
}
},"t1").start();
new Thread(new Runnable() {
@Override
public void run() {
try {
phone.sendSMS();
} catch (Exception e) {
e.printStackTrace();
}
}
},"t2").start();
}
}
class Phone{
public synchronized void sendSMS () throws Exception{
System.out.println(Thread.currentThread().getName() + "sendSmS");
sendEmail();
}
public synchronized void sendEmail () throws Exception{
System.out.println(Thread.currentThread().getName() + "sendEmail");
}
}
运行结果如下:
从运行结果可看到t1线程在获取到锁对象时递归里的锁方法还能继续获取锁对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)