Java多线程代码输出选择题:验证代码正确性及正确选项
代码存在的问题
- 编译错误:Java语法规定一个源文件最多只能有一个
public修饰的类,且类名必须和源文件名一致。当前代码同时声明了public class MyThread和public class myTest,直接编译就会报错,无法运行。 MyThread错误重写了Thread的start()方法:原生Thread.start()的作用是向操作系统申请线程资源,启动线程后自动回调run()方法。但这里重写的start()没有调用super.start(),完全覆盖了原有逻辑,所以调用myThread.start()只会执行打印逻辑,不会启动新线程,也不会触发run()执行。- 给出的
main方法逻辑不全:仅调用了myThread.start(),创建的包装了myRunnable的thread对象从来没有调用start()方法,所以MyRunnable里的代码根本不会执行,实际运行只会输出一行MyThread: start(),和四个备选项都不匹配。 - 额外说明:
MyRunnable里自定义的start()方法没有任何作用,Runnable接口仅要求实现run()方法,线程启动时只会回调run(),不会调用这个自定义的start()。
正确答案
结合四个选项反推,题目明显是漏写了main方法最后一行的thread.start()调用。补上这行代码后:
- 首先执行
myThread.start(),因为重写了start()方法,输出MyThread: start() - 接着执行
thread.start(),走原生Thread的启动逻辑,启动新线程后回调传入的myRunnable的run()方法,输出MyRunnable: run()
最终输出和选项4完全匹配,所以正确答案是4。
内容的提问来源于stack exchange,提问作者user16933456
相关产品推荐
相关产品推荐

