Java线程操作:run()与start()的区别与注意事项

需积分: 10 152 下载量 133 浏览量 更新于2024-07-25 收藏 906KB PDF 举报
"Oracle认证的Java考试相关知识点" 在Oracle认证的Java考试中,重点考察的是对Java编程语言的深入理解和应用能力。以下是基于标题和描述提取的一些关键知识点: 1. **线程的创建与运行**: - 线程在Java中可以通过继承`Thread`类或实现`Runnable`接口来创建。如果选择实现`Runnable`,需要创建一个`Thread`对象,并将`Runnable`对象作为参数传递给`Thread`构造器。 - 为了启动线程,必须调用`Thread`对象的`start()`方法,而不是直接调用`run()`方法。`start()`方法会调度线程的执行,并自动调用`run()`方法。直接调用`run()`只是在一个已经存在的线程(主线程)中执行该方法,不会启动新的线程。 2. **线程的生命周期**: - 一个`Thread`对象的`start()`方法只能调用一次。如果尝试再次调用,会抛出`IllegalThreadStateException`,因为线程已经被启动或者已经结束了。 - 即使一个线程抛出了异常,其他正在运行的线程仍会继续执行,除非它们也遇到了异常或被显式地停止。 3. **示例代码分析**: - 提供的代码段展示了一个实现了`Runnable`接口的类`Certkiller3`,并且在`main`方法中创建了一个`Thread`对象`t`并执行了相关操作。 - 在第7行,调用`t.run()`,这在主线程中执行`run()`方法,不会启动新线程。 - 第8行再次调用`t.run()`,同样在主线程中执行。 - 第9行调用`t.start()`,这会启动一个新的线程来执行`run()`方法。 4. **程序执行结果**: - 选项A (Compilation fails.) 不正确,因为代码片段可以成功编译。 - 选项B (An exception is thrown at runtime.) 错误,没有异常会被抛出。 - 选项C (The code executes "running" once.) 错误,`run()`方法会被执行两次,因为`run()`在第7行和第8行被直接调用。 - 正确答案是D,代码执行会打印"running"两次,因为`run()`方法在主线程中被调用了两次,然后通过`start()`启动的新线程也会执行一次`run()`,总共打印三次"running"。 这个考试问题考察了对Java多线程的理解,包括线程的启动、执行以及方法调用的差异。理解这些概念对于通过Oracle的OCJP(Oracle Certified Professional, Java Programmer)认证至关重要。