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

线程出错后是否立即停止?
Question 120
Given:
1. public class Threads2 implements Runnable {
2.
3. public void run() {
4. System.out.println(”run.”);
5. throw new RuntimeException(”Problem”);
6. }
7. public static void main(String[] args) {
8. Thread t = new Thread(new Threads2());
9. t.start();
10. System.out.println(”End of method.”);
11. }
12. }
Which two can be results? (Choose two)
A. java.lang.RuntimeException: Problem
B. run.
java.lang.RuntimeException: Problem
C. End of method.
java.lang.RuntimeException: Problem
D. End of method.
run.
java.lang.RuntimeException: Problem
E. run.
java.lang.RuntimeException: Problem
End of method.


这题的正确答案是:D,E。

我觉得D还勉强说的过去,最后发现RuntimeException嘛。
可是E呢?RuntimeException之后还能把End of method输出?
这样应该不对的吧?- -

------解决方案--------------------
首先我们要确定
End of method 这个肯定是要被输出的
另外,我们要肯定
run
java.lang.RuntimeException: Problem 
这个肯定也是要输出而且顺序是不变的

剩下的就是第一个东西和第二个东西哪个先输出的问题了,但是这并不是确定的,也就是说谁先输出都有可能的,所以就是DE了

另外再解释一下为什么End of method必定被输出
这是因为,一个线程中出现runtimeexception只是导致这个线程崩溃,并不对其它线程或主线程造成影响,这也是多线程的一个优势吧