1 前言
本节我们讲下Thread.yield()
方法的作用,并对比下sleep()
方法、wait()
方法,看看三者有何区别。
2 yield 方法
作用是:提出释放CPU时间片的请求,不会释放锁,主要知道它不会阻塞线程即可哈,平时我是没怎么用过哈。
特点就是:
(1)yield()方法只是提出申请释放CPU资源,至于能否成功释放由JVM决定。
(2)调用了yield()方法后,线程依然处于RUNNABLE状态,线程不会进入堵塞状态。
(3)调用了yield()方法后,线程处于RUNNABLE状态时,线程就保留了随时被调度的权利。
3 yield 方法与 sleep 方法的区别
yield()
方法调用后线程处于RUNNABLE
状态,而sleep()
方法调用后线程处于TIME_WAITING
状态,所以yield()
方法调用后线程只是暂时的将调度权让给别人,但立刻可以回到竞争线程锁的状态;而sleep()
方法调用后线程处于阻塞状态。
4 sleep 方法与 wait 方法的区别
sleep()
方法的特点就是:(1)使线程进入WAITING状态(2)不会占用CPU资源(3)不释放锁(4)响应中断
那么跟 wait 方法的异同点:
相同点:(1)都可以使阻塞线程(2)都可以响应中断
不同点:
(1)wait()
、notify()
方法必须写在同步方法中,是为了防止死锁和永久等待,使线程更安全,而sleep()
方法不需要有这个限制。
(2)wait()
方法调用后会释放锁sleep()
方法调用后不会释放锁。
(3)sleep()
方法必须要指定时间参数;wait()
方法可以不指定时间参数。
(4)两个方法所属类不同,sleep()
方法属于Thread类;wait()
属于Object类中,放在Object类中是因为Java中每个类都可以是一把锁。
5 小结
本节简单介绍了下yield方法,以及和sleep、wait方法的区别,主要是理解状态的转变以及锁的释放哈,有理解不对的地方欢迎指正哈。
标签:调用,yield,sleep,线程,方法,wait From: https://www.cnblogs.com/kukuxjx/p/17328217.html