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 }