线程让步是指将正在运行的线程从运行状态转为就绪状态,让出CPU使用权,但这仅仅只是程序中的让步,线程的具体执行将由操作系统来进行调度,因此其他线程是否能够立即执行,线程让步之后是不是仍会获得CPU使用权都不得而知。
线程让步可以通过Thread类提供的yield()方法来实现,但是这仅仅只是给调度程序的一种暗示,暗示当前线程愿意让出CPU使用权,但是调度程序可以忽略这个暗示,因此没有任何一种机制能够保证当前线程一定能让出CPU使用权。
另外,需要注意的是,yield()方法被调用之后,只有与当前线程优先级相同或者更高的线程才有进入可执行状态的机会,如果其他线程的优先级低于当前线程,调度程序依旧会调度当前线程。
说明:
对于支持多任务的操作系统来说,不需要使用yield()方法,因为多任务操作系统会以时间片的形式为所有任务(线程)分配CPU使用权。
【例12.6】创建一个自定义线程MyThread,该线程执行for循环,从1输出到5。当线程输出到3时,调用yield()方法为其他线程让步。
在cn.pzhu.op包下创建一个名为ThreadYield的类,关键代码如下:
(www.daowen.com)
运行上述代码,程序运行结果如图12.13所示。
图12.13 程序运行结果
在上述示例中创建了两个线程“线程1”和“线程2”,它们的优先级相同(两者都为默认值)。当输出的内容为“3”时会调用yield()方法,使当前线程重新等待调度程序调度。从图12.13可以看出,线程1在输出3之后执行线程让步,这时线程2得到了执行机会;当线程2输出到3时,同样执行了线程让步,线程1获得执行机会继续执行。
说明:
程序的运行结果并不固定,这取决于操作系统的调度程序。有可能线程让步之后,仍然是当前线程继续执行,并不能保证线程让步一定能让其他线程执行。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。