首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个JAVA SE有关问题

2012-01-16 
一个JAVA SE问题好久没搞SE了,今天偶然看到一个线程问题居然不解?哎在java程序中,有一个多线程类MyThread,

一个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()方法也会执行……

热点排行