logo

CuriousTab

CuriousTab

Discussion


Home Java Programming Threads Comments

  • 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);


    Threads problems


    Search Results


    • 1. What will be the output of the program?
      class MyThread extends Thread 
      {
          public static void main(String [] args) 
          {
              MyThread t = new MyThread(); /* Line 5 */
              t.run();  /* Line 6 */
          }
      
          public void run() 
          {
              for(int i=1; i < 3; ++i) 
              {
                  System.out.print(i + "..");
              }
          }
      }
      

    • Options
    • A. This code will not compile due to line 5.
    • B. This code will not compile due to line 6.
    • C. 1..2..
    • D. 1..2..3..
    • Discuss
    • 2. What will be the output of the program?
      class Happy extends Thread 
      { 
          final StringBuffer sb1 = new StringBuffer(); 
          final StringBuffer sb2 = new StringBuffer(); 
      
          public static void main(String args[]) 
          { 
              final Happy h = new Happy(); 
      
              new Thread() 
              { 
                  public void run() 
                  { 
                      synchronized(this) 
                      { 
                          h.sb1.append("A"); 
                          h.sb2.append("B"); 
                          System.out.println(h.sb1); 
                          System.out.println(h.sb2); 
                      } 
                  } 
              }.start(); 
      
              new Thread() 
              { 
                  public void run() 
                  { 
                      synchronized(this) 
                      { 
                          h.sb1.append("D"); 
                          h.sb2.append("C"); 
                          System.out.println(h.sb2); 
                          System.out.println(h.sb1); 
                      } 
                  } 
              }.start(); 
          } 
      }
      

    • Options
    • A. ABBCAD
    • B. ABCBCAD
    • C. CDADACB
    • D. Output determined by the underlying platform.
    • Discuss
    • 3. Which statement is true?
      class Test1 
      {
          public int value;
          public int hashCode() { return 42; }
      }
      class Test2 
      {
          public int value;
          public int hashcode() { return (int)(value^5); }
      }
      

    • Options
    • A. class Test1 will not compile.
    • B. The Test1 hashCode() method is more efficient than the Test2 hashCode() method.
    • C. The Test1 hashCode() method is less efficient than the Test2 hashCode() method.
    • D. class Test2 will not compile.
    • Discuss
    • 4. Which of the following statements about the hashcode() method are incorrect?

      1. The value returned by hashcode() is used in some collection classes to help locate objects.
      2. The hashcode() method is required to return a positive int value.
      3. The hashcode() method in the String class is the one inherited from Object.
      4. Two new empty String objects will produce identical hashcodes.

    • Options
    • A. 1 and 2
    • B. 2 and 3
    • C. 3 and 4
    • D. 1 and 4
    • Discuss
    • 5. Which statement is true for the class java.util.ArrayList?

    • Options
    • A. The elements in the collection are ordered.
    • B. The collection is guaranteed to be immutable.
    • C. The elements in the collection are guaranteed to be unique.
    • D. The elements in the collection are accessed using a unique key.
    • Discuss
    • 6. What will be the output of the program?
      class MyThread extends Thread 
      { 
          MyThread() {} 
          MyThread(Runnable r) {super(r); } 
          public void run() 
          { 
              System.out.print("Inside Thread ");
          } 
      } 
      class MyRunnable implements Runnable 
      { 
          public void run() 
          { 
              System.out.print(" Inside Runnable"); 
          } 
      } 
      class Test 
      {  
          public static void main(String[] args) 
          { 
              new MyThread().start(); 
              new MyThread(new MyRunnable()).start(); 
          } 
      }
      

    • Options
    • A. Prints "Inside Thread Inside Thread"
    • B. Prints "Inside Thread Inside Runnable"
    • C. Does not compile
    • D. Throws exception at runtime
    • Discuss
    • 7. What will be the output of the program?
      class MyThread extends Thread 
      {
          public static void main(String [] args) 
          {
              MyThread t = new MyThread();
              Thread x = new Thread(t);
              x.start(); /* Line 7 */
          }
          public void run() 
          {
              for(int i = 0; i < 3; ++i) 
              {
                  System.out.print(i + "..");
              }
          }
      }
      

    • Options
    • A. Compilation fails.
    • B. 1..2..3..
    • C. 0..1..2..3..
    • D. 0..1..2..
    • Discuss
    • 8. What will be the output of the program?
      public class Q126 implements Runnable 
      { 
          private int x; 
          private int y; 
      
          public static void main(String [] args) 
          { 
              Q126 that = new Q126(); 
              (new Thread(that)).start( ); /* Line 8 */
              (new Thread(that)).start( ); /* Line 9 */
          } 
          public synchronized void run( ) /* Line 11 */
          { 
              for (;;) /* Line 13 */
              { 
                  x++; 
                  y++; 
                  System.out.println("x = " + x + "y = " + y); 
              } 
          } 
      }
      

    • Options
    • A. An error at line 11 causes compilation to fail
    • B. Errors at lines 8 and 9 cause compilation to fail.
    • C. The program prints pairs of values for x and y that might not always be the same on the same line (for example, "x=2, y=1")
    • D. The program prints pairs of values for x and y that are always the same on the same line (for example, "x=1, y=1". In addition, each value appears once (for example, "x=1, y=1" followed by "x=2, y=2")
    • Discuss
    • 9. What will be the output of the program?
      public class WaitTest 
      {
          public static void main(String [] args) 
          {
              System.out.print("1 ");
              synchronized(args)
              {
                  System.out.print("2 ");
                  try 
                  {
                          args.wait(); /* Line 11 */
                  }
                  catch(InterruptedException e){ }
              }
              System.out.print("3 ");
          }
      }
      

    • Options
    • A. It fails to compile because the IllegalMonitorStateException of wait() is not dealt with in line 11.
    • B. 1 2 3
    • C. 1 3
    • D. 1 2
    • Discuss
    • 10. What will be the output of the program?
      public class SyncTest 
      {
          public static void main (String [] args) 
          {
              Thread t = new Thread() 
              {
                  Foo f = new Foo();
                  public void run() 
                  {
                      f.increase(20);
                  }
              };
          t.start();
          }
      }
      class Foo 
      {
          private int data = 23;
          public void increase(int amt) 
          {
              int x = data;
              data = x + amt;
          }
      }
      
      and assuming that data must be protected from corruption, what?if anything?can you add to the preceding code to ensure the integrity of data?

    • Options
    • A. Synchronize the run method.
    • B. Wrap a synchronize(this) around the call to f.increase().
    • C. The existing code will cause a runtime exception.
    • D. Synchronize the increase() method
    • Discuss


    Comments

    There are no comments.

Enter a new Comment