问题 单项选择题

阅读下面程序:
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。

多项选择题
单项选择题