线程转换图
Thread.sleep(long millis) : 使当前线程阻塞规定的时间,不失去占有的锁。阻塞结束后转入可运行状态。
Thread.yield() : 使当前线程转入可运行状态,不是去占有锁。与sleep相比,不会被阻塞规定时间。
Thread.interrupt(): 设置中断标志为True,当此线程进入阻塞状态时,会抛出interrupted异常。通过捕捉interrupted异常来做出相应处理。
object.wait() :使当前线程进入对象object的等待队列,同时失去占有的object的锁(仅当线程占有object锁时,才可调用其wait方法)。当其他线程调用object.notify(), object.notifyAll()时,才有机会进入锁池队列,参与object对象锁的竞争。
参考 : Java线程的5种状态及切换(透彻讲解)