sleep | 当前线程 | 不释放对象锁,阻塞 | 前线程进入TIME_WAITING状态,但不释放对象锁,millis后线程自动苏醒进入就绪状态。 |
---|---|---|---|
Thread.yield() | 当前线程调用 | 不释放对象所,不阻塞 | 当前线程放弃获取cpu的时间片,由运行状态变为就绪状态,让os再次选择线程。让相同优先级的线程轮流执行,但并不保证一定会轮流执行。实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。 |
thread_1.join() thread_1.join(long mills) |
当前线程里调用其他线程thread1的join() | 不释放对象所,阻塞 | 线程实例的方法join()方法可以使得一个线程在另一个线程结束后再执行。如果join()方法在一个线程实例上调用,当前运行着的线程将阻塞直到这个线程实例完成了执行。 |
obj.wait() | 当前线程调用对象的wait() |
释放对象锁,不阻塞 | 当前线程释放对象锁,进入等待队列。依靠notify()/notifyAll()唤醒或者wait(long timeout)timeout时间到自动唤醒。 |
obj.notify() obj.notifyAll() |
当前线程调用对象的notify()/notifyAll() |
唤醒在此对象监视器上等待的单个线程,选择是任意性的。notifyAll()唤醒在此对象监视器上等待的所有线程。 |