|
|
行 1: |
行 1: |
− | Given:<br>1. public class TestSeven extends Thread{<br>2. private static int x;<br>3. public synchronized void doThings(){<br>4. int current = x;<br>5. current++;<br>6. x = current;<br>7. }<br>8. public void run(){<br>9. doThings();<br>10. }<br>11. }
| |
| | | |
− |
| |
− |
| |
− |
| |
− |
| |
− | Which statement is true?<br>A. Compilation fails.<br>B. An exception is thrown at runtime.<br>C. Synchronizing the run() method would make the class thread-safe.<br>D. The data in variable "x" are protected from concurrent access problems.<br>E. Declaring the doThings() method as static would make the class thread-safe.<br>F. Wrapping the statements within doThings() in a synchronized(new Object()){} block would make the class thread-safe.
| |
− |
| |
− |
| |
− | <div class="toccolours mw-collapsible mw-collapsed">
| |
− | <span style="font-size:medium;">解答</span>
| |
− |
| |
− | ----
| |
− | <div class="mw-collapsible-content">
| |
− | <span style="font-size: medium;">Ans: E </span>
| |
− |
| |
− | <span style="font-size:medium;"> 解說:
| |
− | E是說若宣告doThings方法為靜態的方法將使得該類別為"執行緒安全"。
| |
− | <br>
| |
− | thread-safe是說不管執行緒如何執行,都不會破壞掉類別資料完整性。
| |
− | <br>
| |
− | 若方法是物件的成員,則多個執行緒就可以執行多個版本的doThings方法,好像多人一起操作一個共同的整數資料x(因為x是靜態的/類別的,只有一個),
| |
− | <br>
| |
− | 若是把doThings方法變成類別,那麼也就只有一個版本的doThings方法,加上此方法又是同步的,同一時間只有此方法可以對x進行操作,不會因為多人方法的存取x而造成x的破壞。
| |
− |
| |
− | </span>
| |
− | </div></div>
| |
− | {{SCJP 1.6版考題講解}}
| |