d来实现的。yield方法的作用是:暂停当前正在执行的线程对象,并执行其他线程。要理解yield,必须了解线程的优先级的概念。线程总是存在优先级,优先级范围在110之间。JVM线程调度程序是基于优先级的抢先调度机制。在大多数情况下,当前运行的线程优先级将大于或等于线程池中任何线程的优先级。但这仅仅是大多数情况。
注意:当设计多线程应用程序的时候,一定不要依赖于线程的优先级。因为线程调度优先级操作是没有保障的,只能把线程优先级作用作为一种提高程序效率的方法,但是要保证程序不依赖这种操作。当线程池中线程都具有相同的优先级,调度程序的JVM实现自由选择它喜欢的线程。这时候调度程序的操作有两种可能:一是选择一个线程运行,直到它阻塞或者运行完成为止。二是时间分片,为池内的每个线程提供均等的运行机会。设置线程的优先级:线程默认的优先级是创建它的执行线程的优先级。可以通过setPriorityi
t
ewPriority更改线程的优先级。例如:Threadt
ewMyThreadtsetPriority8tstart线程优先级为110之间的正整数,JVM从不会改变一个线程的优先级。然而,110之间的值是没有保证的。一些JVM可能不能识别10个不同的值,而将这些优先级进行每两个或多个合并,变成少于10个的优先级,则两个或多个优先级的线程可能被映射为一个优先级。线程默认优先级是5,Thread类中有三个常量,定义线程优先级范围:statici
tMAX_PRIORITY线程可以具有的最高优先级。statici
tMIN_PRIORITY线程可以具有的最低优先级。statici
tNORM_PRIORITY分配给线程的默认优先级。3、Threadyield方法Threadyield方法作用是:暂停当前正在执行的线程对象,并执行其他线程。yield应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。
f结论:yield从未导致线程转到等待睡眠阻塞状态。在大多数情况下,yield将导致线程从运行状态转到可运行状态,但有可能没有效果。4、joi
方法Thread的非静态方法joi
让一个线程B“加入”到另外一个线程A的尾部。A执行完毕之前,在B不能工作。例如:Threadt
ewMyThreadtstarttjoi
另外,joi
方法还有带超时限制的重载版本。例如tjoi
5000则让线程等待5000毫秒,如果超过这个时间,则停止等待,变为可运行状态。线程的加入joi
对线程栈r