我们经常用的synchronized是可重入锁,你们经常用的,我不会用的ReentrantLock也是可重入锁。那么可重入锁究竟是什么呢?
可重入,同一个线程就是可以重复获取相同的锁。我们来看看这段代码吧
public class Person { public synchronized void fly(int i){ if(i==0)return; System.out.println(Thread.currentThread().getName()+"这个人还能飞"+i+"次"); fly(i-1); } }
public class Main { public static void main(String[] args) { final Person person=new Person(); Thread t1=new Thread(new Runnable() { @Override public void run() { person.fly(10); } }); Thread t2=new Thread(new Runnable() { @Override public void run() { person.fly(10); } }); t1.start(); t2.start(); } }
执行结果
很容易看出来,当线程0抢到锁后,他仍然能继续调用有synchronized锁的方法,所以证明了synchronized是可重入锁,也了解了可重入锁是什么。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)