在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,不需等待锁释放,这就是重入锁的概念。