可重入锁和wait(),notify()

1. Java中对象对wait(),和notify()方法的调用前提是:

             当前线程必须获得该对象的锁(Monitor),否则会抛出IllegalMonitorStateException,且这两个方法必须在同步代码块中调用。wait():让访问当前对象的线程阻塞。

2.可重入锁:也称为递归锁,即同一个线程在获取外层函数的锁后,进入内部函数时,内部函数也可以获得该锁,可重入所得意义在于防止死锁。Java中synchronized和ReentrantLock都是可重入锁。如下代码执行结果:每个线程名都会被连续打印两次。

 1 public class SynchronizedLock {
 2     public static void main(String[] args) {
 3      Test1 t1=new Test1();
 4      new Thread(t1,"1_Thread").start();
 5      new Thread(t1,"2_Thread").start();
 6      new Thread(t1,"3_Thread").start();
 7 
 8     }
 9 }
10 class Test1 implements Runnable{
11     @Override
12     public void run() {
13         Method1();
14 
15     }
16     public synchronized void Method1(){
17         System.out.println(Thread.currentThread().getName());
18         Method2();
19     }
20 
21     private synchronized void Method2() {
22         System.out.println(Thread.currentThread().getName());
23 
24     }
25 }

猜你喜欢

转载自www.cnblogs.com/xbfchder/p/10972573.html