阅读下面程序:
public class ThreadTest
public static void main(String args[]) throws Exception
int i=0;
Hello t=new Hello();
______;
While(true)
System.out.println("Good Morning"+i++);
if(i==2&&t.isAlive())
System.out.println("Main waiting for Hello!");
t.join(); //等待t运行结束
If(i==5)break:
class Hello extends Thread
int i;
public void run()
while(true)
System.out.println("Hello"+i++):
If(i==5)break;
为使该程序正确执行,下画线处的语句应是
A.sleep()
B.yield()
C.interrupt()
D.start()
参考答案:D
解析: 线程的生命周期过程为:①线程被创建后,并不马上启动,而是进入新建状态。此时线程没有分配资源,只能使用start()和stop()两个控制方法;②新建状态的线程在调用start()方法后,进入可运行状态。此时线程已经分配了必要资源,交给了系统调度。一旦线程实际占有了CPU,就进入了运行状态。③运行状态的线程如果调用了sleep()方法、join()方法或wait()方法,或者申请对象锁未果、有更高优先级线程进入调度等,都可进入阻塞状态。阻塞状态的线程在获取到足够的资源后,也可以转入到可运行状态。④当运行状态的线程正常执行完毕后,就进入了终止状态。
Thread提供了如下的基本线程控制方法:sleep(),线程暂停,让出CPU,使低优先级的线程运行;yield(),线程暂停,让出CPU,使同优先级的其他线程运行。如果不存在有机会运行的线程,yield()方法将直接返回,线程继续;join(),当前线程暂停,等待线程类对象运行结束。
本程序的ThreadTest类中新建了一个Hello线程t,并且在后边的程序中调用线程t的方法,所以应该通过start()方法启动此线程。故答案为D。