sleep()和wait()的区别
都能阻塞线程。
Sleep()是Thread类方法,wait()是Object类方法
Sleep()释放CPU执行权,但不释放锁
Wait()释放CPU执行权,也释放同步锁,使得其他线程可以访问同步代码方法。
为什么wait(),notify()函数定义在Object中,而不是Thread中?
wait(),notify()函数是对对象的同步锁进行操作。
wait()会使当前线程进行等待,因为线程进入等待状态,线程会释放它持有的同步锁,否则其他线程获取不到同步锁无法运行。
负责唤醒等待线程的那个线程叫做唤醒线程,它只有获取了同步锁,并调用对象的notify()方法,才能唤醒等待的线程。
等待线程被唤醒也不能立即运行。它只有等唤醒线程释放了同步锁,等待线程才能获得锁,然后运行。
多线程如何进行信息交互
void notify() 唤醒在此对象监视器上等待的单个线程。
void notifyAll() 唤醒在此对象监视器上等待的所有线程。
void wait() 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法。
void wait(long timeout) 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者超过指定的时间量。
void wait(long timeout, int nanos) 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。
Java中如何实现代理机制(JDK、CGLIB)
JDK动态代理:代理类和目标类实现相同的接口,使用InvocationHandler接口
CGLIB动态代理:代理类是目标类的子类,用到MethodInterceptor接口。