Given:
1. public class Threads4{
2. public static void main(String[] args){
3. new Threads4.go();
4. }
5. public void go(){
6. Runnable r = new Runnable(){
7. public void run(){
8. System.out.print("foo");
9. }
10. };
11. Thread t = new Thread(r);
12. t.start();
13. t.start();
14. }
15. }
What is the result?
A. Compilation fails.
B. An exception is thrown at runtime.
C. The code executes normally and prints "foo";
D. The code executes normally, but nothing is printed.
只是吹毛求疵了一下,
這個程是本身第3行應該要改成
new Threads4().go();
不然會有編譯錯誤
Threads4.java:12: error: cannot find symbol
new Threads4.good();
^
symbol: class good
location: class Threads4
1 error
而以上都只是個人的吹毛求疵, 不是題目重點, 不然答案就是A了.
在程式中出現兩個 t.start();
編譯正確但是執行錯誤
fooException in thread "main"
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:705)
at ex_004_thread_start.go(ex_004_thread_start.java:13)
at ex_004_thread_start.main(ex_004_thread_start.java:3)
陳富國網路資源
http://192.192.246.169/~wells/wiki/index.php/SCJP_1.6%E7%89%88%E8%80%83%E9%A1%8C_001
答案給了E
說明為 一個執行緒只能啟動一次 (t.start()只能下一次),執行緒是物件,物件相關的動作發生問題是在執行時期產生例外,而不是編譯的錯誤。
而不是跟B一樣嗎, 這部分可能就要考慮到
https://www.javaworld.com.tw/jute/post/view?bid=17&id=276985
有提到因為題目錯誤, 不想使讀者誤解, 所以才另外寫下答案.
(這是我個人的歸納拉 XD)
沒有留言:
張貼留言