可重入锁

来源:互联网 发布:虚拟仿真软件哪种好 编辑:程序博客网 时间:2024/06/06 06:30
本文里面讲的是广义上的可重入锁,而不是单指JAVA下的ReentrantLock。

可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。


下面的例子为非递归的例子,可重入锁也就是说加锁的主语是线程而不是方法调用


在JAVA环境下 ReentrantLock 和synchronized 都是 可重入锁

下面是使用实例


public class Test implements Runnable{public synchronized void get(){System.out.println(Thread.currentThread().getId());set();//虽然set()方法有 synchronized关键字,但是因为该线程已经获得了锁,那么仍然可以再次进入自己已经获得的锁}public synchronized void set(){System.out.println(Thread.currentThread().getId());}@Overridepublic void run() {get();}public static void main(String[] args) {Test ss=new Test();new Thread(ss).start();new Thread(ss).start();new Thread(ss).start();}}


输出结果为:

8

8

10

10

9

9


即同一个线程输出两次


0 0