好久没搞SE了,今天偶然看到一个线程问题居然不解?哎
在java程序中,有一个多线程类MyThread,包含一个方法run()和一个方法void disp()。以下描述正确的是(        )
MyThreadmt=new MyThread (); mt.start();mt.disp();运行完线程体run方法后再运行disp()方法
MyThreadmt=new MyThread ();mt.disp();mt.start();运行完disp()后才能启动线程体run
MyThreadmt=new MyThread ();mt.start();mt.disp();线程体run一定会在disp结束前结束
MyThreadmt=new MyThread ();mt.start();mt.disp();mt.start()和mt.disp()两条命令,哪条放在前面哪条放在后面运行结果一样。
不要考虑run()方法有没有写while()吗?个人偏向第四个,但不知原因?求解

解决方案 »

  1.   

    B
    mt.disp(); mt如果不调用start,就跟一般类的实例一样,只是访问实例的方法,主线程会等待方法调用结束返回才继续执行后面的处理,所以mt.start在调用mt.disp以后才会被执行,线程也才开始被启动mt.start是启动线程,线程什么时候才可能被执行,有系统决定(CPU时间分配),所以mt.start在前,具有随机性,mt.start在后,主线程就是直接调用mt实例的方法,所以必须调用结束后才会执行后面的处理,所以结果是确定的,所以不存在两种结果一样
      

  2.   

    MyThreadmt=new MyThread ();
    mt.start();
    mt.disp();
    mt.start()和mt.disp()两条命令,哪条放在前面哪条放在后面运行结果一样。
    因为是多线程类 所以即使 不调用disp()方法,disp()方法也会执行……
      

  3.   

    不调用disp方法,disp也会被执行?除非disp在run方法里,否则不可能。
    首先start只是启动线程,但不代表线程就马上会执行,所以start在前,也不一定线程先执行,,这样就存在随机性,也就是可能线程的run先执行,也可能主线程调用的disp先执行。
    把disp看作一个简单的方法调用,那么主线程调用disp就必然会等待调用结束返回才会执行后面的代码,所以disp在前,就必然是主线程调用disp结束之后才会调用start启动线程,结果是确定,不存在随机性。
      

  4.   

    明了明了,start()在前就随机,disp()在前就确定...结
      

  5.   

    start()是让线程 处在可运行状态   但并不会马上运行…………