Object:
void wait()相当于wait(0),无超时时间。
void wait(long timeout),timeout单位毫秒。
void wait(long timeout, int nanos),timeout单位毫秒,nanos为增加的纳秒。
Thread:
void sleep(long millis),timeout单位毫秒。
void sleep(long millis, int nanos),timeout单位毫秒,nanos为增加的纳秒。
void join(long millis)
void join(long millis, int nanos)
void join()相当于join(0),无超时时间。
BlockingQueue:
void put(E e)
boolean offer(E e, long timeout, TimeUnit unit)
E take()
E poll(long timeout, TimeUnit unit)
执行这些方法时,如果线程标记中断(即interrupt()),会throws InterruptedException,然后线程复位:线程标记为非中断,线程继续执行。
sleep、wait对比:
1、sleep是线程中的方法,但是wait是Object中的方法。
2、sleep不会释放锁,但是wait会释放,而且将线程会加入到等待队列中。
3、sleep不依赖synchronized,但是wait依赖synchronized,object的wait必须用synchronized,而且对象锁是调用wait的object,否则报IllegalMonitorStateException。
4、sleep没有对应的唤醒方法,wait有,即notify()和notifyAll()。
5、sleep(0)表示不休眠,wait(0)表示一直等待,直至唤醒或者因被中断异常而线程复位。