Saturday, August 28, 2010

Multithreading and un-Synchronized output

Courtesy of Sun Web Learning Center

Given:


5. class NoGo implements Runnable {
6.   private static int i;
7.   public synchronized void run() {
8.     if (i%10 != 0) { i++; }
9.     for(int x=0; x<10; x++, i++)
10.       { if (x == 4) Thread.yield(); }
11.   }
12.   public static void main(String [] args) {
13.     NoGo n = new NoGo();
14.     for(int x=0; x<101; x++) {
15.       new Thread(n).start();
16.       System.out.print(i + " ");
17. } } }

Which is true?


A     The output can never contain the value 10.
B     The output can never contain the value 30.
C     The output can never contain the value 297.
D     The output can never contain the value 820.
E     Making the run method un-synchronized will NOT change the possible output.

E is correct. To make sure that line 16 is never executed when an invocation of the run method is partially complete, it (line 16) should be placed inside the run method.

No comments:

Post a Comment