在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,不需等待锁释放,

这就是重入锁的概念。

posted on 2018-08-12 11:46  JonRain0625  阅读(168)  评论(0编辑  收藏  举报