线程让步
在Thread有一个yield方法
public static native void yield();
特点:
- yield()的作用是线程让步
- 作用在线程上面
- 它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;
- 但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!
配合图片
也就是线程由Running状态到Runnable状态,只是让出了CPU,如果线程有锁什么的,是不会让出的。
线程休眠
在Thread有二个sleep方法
public static native void sleep(long millis) throws InterruptedException;
public static void sleep(long millis, int nanos)throws InterruptedException ;
特点:
- sleep() 的作用是让当前线程休眠
- 作用在当前运行线程上面
- 当前线程会从“运行状态”进入到“休眠(阻塞)状态”
- sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行。
- 同yield一样,只是线程状态改变,线程所持有的任何锁都不会释放。