Thread.yield()是否对良好的编码实践有用?

时间:2015-04-21 13:09:47

标签: java multithreading

Thread.yield()是否保证Thread会一直等到执行其他线程?

1 个答案:

答案 0 :(得分:2)

Thread.yield()是大约三十年前的遗留物,当时在没有操作系统支持的单CPU计算机上实现了线程,这种技术称为“#34;协作式多任务处理"。” p>

在那些日子里,线程永远运行的唯一方式是当其他一些线程"产生" CPU通过调用线程库中的某个函数来实现。通常这会发生在一个线程需要等待某些东西的点上,所以很自然地,这是让其他线程运行的好时机。

yield()调用是针对线程进行长时间计算的特殊情况,并且它不想等待任何事情。程序员会在算法的战略位置撒上一些yield()调用,以确保其他线程能够及时响应事件。

让我再说一遍,因为它很重要:一个线程会在想要等待的点上调用yield()。

某些形式的yield()几乎在每个线程库中幸存下来,但它不再用于任何目的,除非你重新实现最低级别的同步原语作为学习练习。