在java'多线程中用Synchronized 可以获取一个对象的锁来保持代码的排队执行,也就是代码的同步执行,而 重入锁的概念是,一个线程获取了一个对象的锁,当再次需要获取这个对象的锁时,是可以获取到无需等待,称为重入锁,如果是另一个线程的话是要等待这个线程释放对锁才能获取。
举例说明:
class Service { public sysnchronized void service1(){ system.out.println(" service 1 ") sercive2(); } public syschronized void service2(){ system.out.println("service2") } class MyThread extends Thread { @Override public void run() { Service service = new Service(); service.service1(); } } public class Run { public static void main(String[] args) { MyThread t = new MyThread(); t.start(); } }
因为service中的两个方法都同步了。在service1中调用service2 是要获取锁的,但是因为service1和service2 持有的是同一把锁。所以可以直接进入service2,不需等待锁释放,
这就是重入锁的概念。