阅读下面程序: public class ThreadTest {  public static void main(String args[]) throws Exception {   int i=0;   Hello t=ne

admin2012-03-21  11

问题 阅读下面程序:    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、t.sleep()
B、t.yield()  
C、t.interrupt()
D、t.start()

答案D

解析 线程的生命周期过程为:①线程被创建后,并不马上启动,而是进入新建状态。此时线程没有分配资源,只能使用start()和stop()两个控制方法;②新建状态的线程在调用start()方法后,进入可运行状态。此时线程已经分配了必要资源,交给了系统调度。一旦线程实际占有了CPU,就进入了运行状态。③运行状态的线程如果调用了sleep()方法、join()方法或wait()方法,或者申请对象锁未果、有更高优先级线程进入调度等,都可进入阻塞状态。阻塞状态的线程在获取到足够的资源后,也可以转入到可运行状态。④当运行状态的线程正常执行完毕后,就进入了终止状态。
   Thread提供了如下的基本线程控制方法:sleep(),线程暂停,让出CPU,使低优先级的线程运行;yield(),线程暂停,让出CPU,使同优先级的其他线程运行。如果不存在有机会运行的线程,yield()方法将直接返回,线程继续;join(),当前线程暂停,等待线程类对象运行结束。
   本程序的ThreadTest类中新建了一个Hello线程t,并且在后边的程序中调用线程t的方法,所以应该通过start()方法启动此线程。故答案为D。
转载请注明原文地址:https://kaotiyun.com/show/O62p777K
0

最新回复(0)