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();
            t.start();
            System.out.print("one. ");
            t.start();
            System.out.print("two. ");
        }
        public void run() 
        {
            System.out.print("Thread ");
        }
    }
    


  • Options
  • A. Compilation fails
  • B. An exception occurs at runtime.
  • C. It prints "Thread one. Thread two."
  • D. The output cannot be determined.

  • Correct Answer
  • An exception occurs at runtime. 

    Explanation
    When the start() method is attempted a second time on a single Thread object, the method will throw an IllegalThreadStateException (you will not need to know this exception name for the exam). Even if the thread has finished running, it is still illegal to call start() again.

    Threads problems


    Search Results


    • 1. What will be the output of the program?
      class Test116 
      { 
      static final StringBuffer sb1 = new StringBuffer(); 
      static final StringBuffer sb2 = new StringBuffer(); 
      public static void main(String args[]) 
      { 
          new Thread() 
          { 
              public void run() 
              { 
                  synchronized(sb1) 
                  { 
                      sb1.append("A"); 
                      sb2.append("B"); 
                  } 
              } 
          }.start(); 
      
          new Thread() 
          { 
              public void run() 
              { 
                  synchronized(sb1) 
                  { 
                      sb1.append("C"); 
                      sb2.append("D"); 
                  } 
              } 
          }.start(); /* Line 28 */
      
          System.out.println (sb1 + " " + sb2); 
          } 
      }
      

    • Options
    • A. main() will finish before starting threads.
    • B. main() will finish in the middle of one thread.
    • C. main() will finish after one thread.
    • D. Cannot be determined.
    • Discuss
    • 2. 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
    • 3. 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
    • 4. 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
    • 5. 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
    • 6. What will be the output of the program?
      class s1 implements Runnable 
      { 
          int x = 0, y = 0; 
          int addX() {x++; return x;} 
          int addY() {y++; return y;} 
          public void run() { 
          for(int i = 0; i < 10; i++) 
              System.out.println(addX() + " " + addY()); 
      } 
          public static void main(String args[]) 
          { 
              s1 run1 = new s1(); 
              s1 run2 = new s1(); 
              Thread t1 = new Thread(run1); 
              Thread t2 = new Thread(run2); 
              t1.start(); 
              t2.start(); 
          } 
      }

    • Options
    • A. Compile time Error: There is no start() method
    • B. Will print in this order: 1 1 2 2 3 3 4 4 5 5...
    • C. Will print but not exactly in an order (e.g: 1 1 2 2 1 1 3 3...)
    • D. Will print in this order: 1 2 3 4 5 6... 1 2 3 4 5 6...
    • Discuss
    • 7. 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
    • 8. The static method Thread.currentThread() returns a reference to the currently executing Thread object. What is the result of this code?
      class Test 
      {
          public static void main(String [] args) 
          {
              printAll(args);
          }
      
          public static void printAll(String[] lines) 
          {
              for(int i = 0; i < lines.length; i++)
              {
                  System.out.println(lines[i]);
                  Thread.currentThread().sleep(1000);
              }
          }
      }
      

    • Options
    • A. Each String in the array lines will output, with a 1-second pause.
    • B. Each String in the array lines will output, with no pause in between because this method is not executed in a Thread.
    • C. Each String in the array lines will output, and there is no guarantee there will be a pause because currentThread() may not retrieve this thread.
    • D. This code will not compile.
    • Discuss
    • 9. What will be the output of the program?
      public class ThreadTest extends Thread 
      { 
          public void run() 
          { 
              System.out.println("In run"); 
              yield(); 
              System.out.println("Leaving run"); 
          } 
          public static void main(String []argv) 
          { 
              (new ThreadTest()).start(); 
          } 
      }
      

    • Options
    • A. The code fails to compile in the main() method
    • B. The code fails to compile in the run() method
    • C. Only the text "In run" will be displayed
    • D. The text "In run" followed by "Leaving run" will be displayed
    • Discuss
    • 10. What will be the output of the program?
      class s1 extends Thread
      { 
          public void run() 
          { 
              for(int i = 0; i < 3; i++) 
              { 
                  System.out.println("A"); 
                  System.out.println("B"); 
              } 
          } 
      } 
      class Test120 extends Thread 
      { 
          public void run() 
          { 
              for(int i = 0; i < 3; i++) 
              { 
                  System.out.println("C"); 
                  System.out.println("D"); 
              } 
          } 
          public static void main(String args[]) 
              { 
              s1 t1 = new s1(); 
              Test120 t2 = new Test120(); 
              t1.start(); 
              t2.start(); 
          } 
      }
      

    • Options
    • A. Compile time Error There is no start() method
    • B. Will print in this order AB CD AB...
    • C. Will print but not be able to predict the Order
    • D. Will print in this order ABCD...ABCD...
    • Discuss


    Comments

    There are no comments.

Enter a new Comment