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(object){}中,否则报IllegalMonitorStateException。 4、sleep没有对应的唤醒方法,wait有,即notify()和notifyAll()。 5、sleep(0)表示不休眠,wait(0)表示一直等待,直至唤醒或者因被中断异常而线程复位。