本文首先对线程的等待和唤醒概念进行简单介绍,接着介绍如何使用,并缝隙为什么这俩个功能是放在Object类中,而不是放置在Thread线程里,最后介绍下线程休眠,以及其和wait的区别。
线程等待和唤醒方法介绍
在Object类中定义了wait(), notify()和notifyAll()三个方法用于等待和唤醒线程。
wait()的作用是让当前线程进入等待状态,同时wait()也会让当前线程释放它所持有的锁。
而notify()和notifyAll()的作用则是唤醒当前对象上的等待线程notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程。
Object类中关于等待/唤醒的API详细信息如下:
- notify() :唤醒在此对象监视器上等待的单个线程。
- **notifyAll()**:唤醒在此对象监视器上等待的所有线程。
- wait() :让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的notify()方法或 notifyAll()方法,当前线程被唤醒(进入就绪状态)。
- **wait(long timeout)**:让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify()方法或notifyAll()方法,或者超过指定的时间量,当前线程被唤醒(进入就绪状态)。
- wait(long timeout, int nanos) – 让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量,当前线程被唤醒(进入就绪状态)。