logo

CuriousTab

CuriousTab

Discussion


Home Java Programming Threads Comments

  • Question
  • 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..

  • Correct Answer
  • 0..1..2.. 

    Explanation
    The thread MyThread will start and loop three times (from 0 to 2).

    Option A is incorrect because the Thread class implements the Runnable interface; therefore, in line 7, Thread can take an object of type Thread as an argument in the constructor.

    Option B and C are incorrect because the variable i in the for loop starts with a value of 0 and ends with a value of 2.


    Threads problems


    Search Results


    • 1. 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
    • 2. 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...
    • Discuss
    • 3. 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
    • 4. 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
    • 5. 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
    • 6. 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
    • 7. 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
    • 8. 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
    • 9. What will be the output of the program?
      public class ThreadDemo 
      { 
          private int count = 1; 
          public synchronized void doSomething() 
          { 
              for (int i = 0; i < 10; i++) 
                  System.out.println(count++); 
          } 
          public static void main(String[] args) 
          { 
              ThreadDemo demo = new ThreadDemo(); 
              Thread a1 = new A(demo); 
              Thread a2 = new A(demo); 
              a1.start(); 
              a2.start(); 
          } 
      } 
      class A extends Thread 
      { 
          ThreadDemo demo; 
          public A(ThreadDemo td) 
          { 
              demo = td; 
          } 
          public void run() 
          { 
              demo.doSomething(); 
          } 
      }
      

    • Options
    • A. It will print the numbers 0 to 19 sequentially
    • B. It will print the numbers 1 to 20 sequentially
    • C. It will print the numbers 1 to 20, but the order cannot be determined
    • D. The code will not compile.
    • Discuss
    • 10. What will be the output of the program?
      public class Test 
      {
          public static void main (String [] args) 
          {
              final Foo f = new Foo();
              Thread t = new Thread(new Runnable() 
              {
                  public void run() 
                  {
                      f.doStuff();
                  }
              });
              Thread g = new Thread() 
              {
                  public void run() 
                  {
                      f.doStuff();
                  }
              };
              t.start();
              g.start();
          }
      }
      class Foo 
      {
          int x = 5;
          public void doStuff() 
          {
              if (x < 10) 
              {
                  // nothing to do
                  try 
                  {
                      wait();
                      } catch(InterruptedException ex) { }
              } 
              else 
              {
                  System.out.println("x is " + x++);
                  if (x >= 10) 
                  {
                      notify();
                  }
              }
          }
      }
      

    • Options
    • A. The code will not compile because of an error on notify(); of class Foo.
    • B. The code will not compile because of some other error in class Test.
    • C. An exception occurs at runtime.
    • D. It prints "x is 5 x is 6".
    • Discuss


    Comments

    There are no comments.

Enter a new Comment