线程的5中状态
    线程的状态 - 图1
    方法比较


    前线程进入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()唤醒在此对象监视器上等待的所有线程。

    06b00d5a-15d3-4af7-97c0-51f1db478523.jpg