Java中yield()方法作用讲解
①.`yield()`方法只是提出申请释放CPU资源,至于能否成功释放由JVM决定。由于这个特性,一般编程中用不到此方法,但在很多并发工具包中,`yield()`方法被使用,如`AQS`、`ConcurrentHashMap`、`FutureTask`等。②.调用了`yield()`方法后,线程依然处于`RUNNABLE`状态,线程不会进入堵塞状态。
简介
本节我们讲下Thread.yield()方法的作用,并对比下sleep()方法,看看二者有何区别。
一.Thread.yield()方法的作用
作用:提出释放CPU时间片的请求。不会释放锁,线程依然处于RUNNABLE状态。
1.yield()方法详解
①.yield()方法只是提出申请释放CPU资源,至于能否成功释放由JVM决定。
由于这个特性,一般编程中用不到此方法,但在很多并发工具包中,yield()方法被使用,如AQS、ConcurrentHashMap、FutureTask等。
②.调用了yield()方法后,线程依然处于RUNNABLE状态,线程不会进入堵塞状态。
什么是堵塞状态
线程状态处于BLOCKED或WAITING或TIME_WAITING这三种统称为堵塞状态
关于线程状态,详见文章《Java线程状态完全解析教程》,我在这篇文章里有详细解析和代码示例,这里不在赘述。
③.调用了yield()方法后,线程处于RUNNABLE状态时,线程就保留了随时被调度的权利。
二.yield()方法和sleep()方法有什么区别
yield()方法调用后线程处于RUNNABLE状态,而sleep()方法调用后线程处于TIME_WAITING状态,所以yield()方法调用后线程只是暂时的将调度权让给别人,但立刻可以回到竞争线程锁的状态;而sleep()方法调用后线程处于阻塞状态。
关于sleep()方法的更多讲解,详见《Java中sleep()方法和wait()方法的异同点》。
总结
本文介绍了yield()方法的作用,分析了调用yield()方法后其线程状态代表的含义,以及与sleep()方法做了对比,希望本文能帮到你。
更多推荐



所有评论(0)