好久没搞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()吗?个人偏向第四个,但不知原因?求解
在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()吗?个人偏向第四个,但不知原因?求解
解决方案 »
- java程序员终极推荐图书pdf及其小项目下载
- 关于在读取输入流时的while循环和read方法
- 请高手给点思路?
- jdbc连数据库的问题!!急急急急急急急
- 请教,有关xml文件
- Java用borland的Jbuilder8好还是用sun 的j2sdk 1.4好??
- 大家来讨论一下这个问题——————网络安全!如果改变一个方式的话…………
- *****请教SWING高手,我想让JTree一开始的某个节点处于展开,用的是expandPath(TreePath p),请问如何构造TreePath参数,用字符串可以吗
- package怎么使用啊!
- 为什么安装完JBuilder4.0后, ie 无法看见Applet生成的控件?
- 紧急求助啊,关于基本类型的值传递和封装类的引用传递
- 跪求java.media包
mt.disp(); mt如果不调用start,就跟一般类的实例一样,只是访问实例的方法,主线程会等待方法调用结束返回才继续执行后面的处理,所以mt.start在调用mt.disp以后才会被执行,线程也才开始被启动mt.start是启动线程,线程什么时候才可能被执行,有系统决定(CPU时间分配),所以mt.start在前,具有随机性,mt.start在后,主线程就是直接调用mt实例的方法,所以必须调用结束后才会执行后面的处理,所以结果是确定的,所以不存在两种结果一样
mt.start();
mt.disp();
mt.start()和mt.disp()两条命令,哪条放在前面哪条放在后面运行结果一样。
因为是多线程类 所以即使 不调用disp()方法,disp()方法也会执行……
首先start只是启动线程,但不代表线程就马上会执行,所以start在前,也不一定线程先执行,,这样就存在随机性,也就是可能线程的run先执行,也可能主线程调用的disp先执行。
把disp看作一个简单的方法调用,那么主线程调用disp就必然会等待调用结束返回才会执行后面的代码,所以disp在前,就必然是主线程调用disp结束之后才会调用start启动线程,结果是确定,不存在随机性。