日期:2014-05-20  浏览次数:20658 次

一个JAVA SE问题
好久没搞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()吗?个人偏向第四个,但不知原因?求解

------解决方案--------------------
B
mt.disp(); mt如果不调用start,就跟一般类的实例一样,只是访问实例的方法,主线程会等待方法调用结束返回才继续执行后面的处理,所以mt.start在调用mt.disp以后才会被执行,线程也才开始被启动

mt.start是启动线程,线程什么时候才可能被执行,有系统决定(CPU时间分配),所以mt.start在前,具有随机性,mt.start在后,主线程就是直接调用mt实例的方法,所以必须调用结束后才会执行后面的处理,所以结果是确定的,所以不存在两种结果一样
------解决方案--------------------
MyThreadmt=new MyThread ();
mt.start();
mt.disp();
mt.start()和mt.disp()两条命令,哪条放在前面哪条放在后面运行结果一样。
因为是多线程类 所以即使 不调用disp()方法,disp()方法也会执行……
------解决方案--------------------
探讨
MyThreadmt=new MyThread ();
mt.start();
mt.disp();
mt.start()和mt.disp()两条命令,哪条放在前面哪条放在后面运行结果一样。
因为是多线程类 所以即使 不调用disp()方法,disp()方法也会执行……