logo

CuriousTab

CuriousTab

Discussion


Home Java Programming Threads See What Others Are Saying!
  • Question
  • What will be the output of the program?
    public class Test107 implements Runnable 
    { 
        private int x; 
        private int y; 
    
        public static void main(String args[]) 
        {
            Test107 that = new Test107(); 
            (new Thread(that)).start(); 
            (new Thread(that)).start(); 
        } 
        public synchronized void run() 
        {
            for(int i = 0; i < 10; i++) 
            { 
                x++; 
                y++; 
                System.out.println("x = " + x + ", y = " + y); /* Line 17 */
            } 
        } 
    } 
    


  • Options
  • A. Compilation error.
  • B. Will print in this order: x = 1 y = 1 x = 2 y = 2 x = 3 y = 3 x = 4 y = 4 x = 5 y = 5... but the output will be produced by both threads running simultaneously.
  • C. Will print in this order: x = 1 y = 1 x = 2 y = 2 x = 3 y = 3 x = 4 y = 4 x = 5 y = 5... but the output will be produced by first one thread then the other. This is guaranteed by the synchronised code.
  • D. Will print in this order x = 1 y = 2 x = 3 y = 4 x = 5 y = 6 x = 7 y = 8...

  • Correct Answer
  • Will print in this order: x = 1 y = 1 x = 2 y = 2 x = 3 y = 3 x = 4 y = 4 x = 5 y = 5... but the output will be produced by first one thread then the other. This is guaranteed by the synchronised code. 

    Explanation
    Both threads are operating on the same instance variables. Because the code is synchronized the first thread will complete before the second thread begins. Modify line 17 to print the thread names:

    System.out.println(Thread.currentThread().getName() + " x = " + x + ", y = " + y);


    More questions

    • 1. What will be the output of the program?
      public class CommandArgsThree 
      {
          public static void main(String [] args) 
          {
              String [][] argCopy = new String[2][2];
              int x;
              argCopy[0] = args;
              x = argCopy[0].length;
              for (int y = 0; y < x; y++) 
              {
                  System.out.print(" " + argCopy[0][y]);
              }
          }
      }
      
      and the command-line invocation is

      > java CommandArgsThree 1 2 3


    • Options
    • A. 0 0
    • B. 1 2
    • C. 0 0 0
    • D. 1 2 3
    • Discuss
    • 2. What will be the output of the program?
      public class TestDogs 
      {
          public static void main(String [] args) 
          {
              Dog [][] theDogs = new Dog[3][];
              System.out.println(theDogs[2][0].toString());
          }
      }
      class Dog { }
      

    • Options
    • A. null
    • B. theDogs
    • C. Compilation fails
    • D. An exception is thrown at runtime
    • Discuss
    • 3. What will be the output of the program?
      public class ExamQuestion6 
      {
          static int x; 
          boolean catch()
          {
              x++; 
              return true; 
          } 
          public static void main(String[] args)
          {
              x=0; 
              if ((catch() | catch()) || catch()) 
                  x++; 
              System.out.println(x); 
          } 
      }
      

    • Options
    • A. 1
    • B. 2
    • C. 3
    • D. Compilation Fails
    • Discuss
    • 4. What will be the output of the program?
      public class If1 
      {
          static boolean b;
          public static void main(String [] args) 
          {
              short hand = 42;
              if ( hand < 50 && !b ) /* Line 7 */
                  hand++;
              if ( hand > 50 );     /* Line 9 */
              else if ( hand > 40 ) 
              {
                  hand += 7;
                  hand++;    
              }
              else
                  --hand;
              System.out.println(hand);
          }
      }
      

    • Options
    • A. 41
    • B. 42
    • C. 50
    • D. 51
    • Discuss
    • 5. What will be the output of the program?
      public class Test 
      { 
          public static void main (String args[]) 
          {
              String str = NULL; 
              System.out.println(str); 
          } 
      }
      

    • Options
    • A. NULL
    • B. Compile Error
    • C. Code runs but no output
    • D. Runtime Exception
    • Discuss
    • 6. What will be the output of the program?

      System.out.println(Math.sqrt(-4D));


    • Options
    • A. -2
    • B. NaN
    • C. Compile Error
    • D. Runtime Exception
    • Discuss
    • 7. What will be the output of the program?
      package foo; 
      import java.util.Vector; /* Line 2 */
      private class MyVector extends Vector 
      {
          int i = 1; /* Line 5 */
          public MyVector() 
          { 
              i = 2; 
          } 
      } 
      public class MyNewVector extends MyVector 
      {
          public MyNewVector () 
          { 
              i = 4; /* Line 15 */
          } 
          public static void main (String args []) 
          { 
              MyVector v = new MyNewVector(); /* Line 19 */
          } 
      }
      

    • Options
    • A. Compilation will succeed.
    • B. Compilation will fail at line 3.
    • C. Compilation will fail at line 5.
    • D. Compilation will fail at line 15.
    • Discuss
    • 8. What will be the output of the program?
      TreeSet map = new TreeSet();
      map.add("one");
      map.add("two");
      map.add("three");
      map.add("four");
      map.add("one");
      Iterator it = map.iterator();
      while (it.hasNext() ) 
      {
          System.out.print( it.next() + " " );
      }
      

    • Options
    • A. one two three four
    • B. four three two one
    • C. four one three two
    • D. one two three four one
    • Discuss
    • 9. Which three statements are true?

      1. Assertion checking is typically enabled when a program is deployed.
      2. It is never appropriate to write code to handle failure of an assert statement.
      3. Assertion checking is typically enabled during program development and testing.
      4. Assertion checking can be selectively enabled or disabled on a per-package basis, but not on a per-class basis.
      5. Assertion checking can be selectively enabled or disabled on both a per-package basis and a per-class basis.

    • Options
    • A. 1, 2 and 4
    • B. 2, 3 and 5
    • C. 3, 4 and 5
    • D. 1, 2 and 5
    • Discuss
    • 10. What will be the output of the program?
      class s implements Runnable 
      { 
          int x, y; 
          public void run() 
          { 
              for(int i = 0; i < 1000; i++) 
                  synchronized(this) 
                  { 
                      x = 12; 
                      y = 12; 
                  } 
              System.out.print(x + " " + y + " "); 
          } 
          public static void main(String args[]) 
          { 
              s run = new s(); 
              Thread t1 = new Thread(run); 
              Thread t2 = new Thread(run); 
              t1.start(); 
              t2.start(); 
          } 
      }
      

    • Options
    • A. DeadLock
    • B. It print 12 12 12 12
    • C. Compilation Error
    • D. Cannot determine output.
    • Discuss


    Comments

    There are no comments.

Enter a new Comment