logo

CuriousTab

CuriousTab

Discussion


Home Java Programming Threads See What Others Are Saying!
  • Question
  • Which of the following will directly stop the execution of a Thread?


  • Options
  • A. wait()
  • B. notify()
  • C. notifyall()
  • D. exits synchronized code

  • Correct Answer
  • wait() 

    Explanation
    Option A is correct. wait() causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object.

    Option B is wrong. notify() - wakes up a single thread that is waiting on this object's monitor.

    Option C is wrong. notifyAll() - wakes up all threads that are waiting on this object's monitor.

    Option D is wrong. Typically, releasing a lock means the thread holding the lock (in other words, the thread currently in the synchronized method) exits the synchronized method. At that point, the lock is free until some other thread enters a synchronized method on that object. Does entering/exiting synchronized code mean that the thread execution stops? Not necessarily because the thread can still run code that is not synchronized. I think the word directly in the question gives us a clue. Exiting synchronized code does not directly stop the execution of a thread.


    More questions

    • 1. What will be the output of the program?
      public class A
      { 
          void A() /* Line 3 */
          {
              System.out.println("Class A"); 
          } 
          public static void main(String[] args) 
          { 
              new A(); 
          } 
      }
      

    • Options
    • A. Class A
    • B. Compilation fails.
    • C. An exception is thrown at line 3.
    • D. The code executes with no output.
    • Discuss
    • 2. What will be the output of the program?
      class Test 
      {
          public static void main(String [] args) 
          {
              Test p = new Test();
              p.start();
          }
      
          void start() 
          {
              boolean b1 = false;
              boolean b2 = fix(b1);
              System.out.println(b1 + " " + b2);
          }
      
          boolean fix(boolean b1) 
          {
              b1 = true;
              return b1;
          }
      }
      

    • Options
    • A. true true
    • B. false true
    • C. true false
    • D. false false
    • Discuss
    • 3. What will be the output of the program?
      class Test 
      {
          static int s;
          public static void main(String [] args) 
          {
              Test p = new Test();
              p.start();
              System.out.println(s);
          }
      
          void start() 
          {
              int x = 7;
              twice(x);
              System.out.print(x + " ");
          }
      
          void twice(int x) 
          {
              x = x*2;
              s = x;
          }
      }
      

    • Options
    • A. 7 7
    • B. 7 14
    • C. 14 0
    • D. 14 14
    • Discuss
    • 4. You want a class to have access to members of another class in the same package. Which is the most restrictive access that accomplishes this objective?

    • Options
    • A. public
    • B. private
    • C. protected
    • D. default access
    • Discuss
    • 5. What will be the output of the program?
      class Super
      { 
          public int i = 0; 
      
          public Super(String text) /* Line 4 */
          {
              i = 1; 
          } 
      } 
      
      class Sub extends Super
      {
          public Sub(String text)
          {
              i = 2; 
          } 
      
          public static void main(String args[])
          {
              Sub sub = new Sub("Hello"); 
              System.out.println(sub.i); 
          } 
      }
      

    • Options
    • A. 0
    • B. 1
    • C. 2
    • D. Compilation fails.
    • Discuss
    • 6. What will be the output of the program (in jdk1.6 or above)?
      public class BoolTest 
      {
          public static void main(String [] args) 
          {
              Boolean b1 = new Boolean("false");
              boolean b2;
              b2 = b1.booleanValue();
              if (!b2) 
              {
                  b2 = true;
                  System.out.print("x ");
              }
              if (b1 & b2) /* Line 13 */
              {
                  System.out.print("y ");
              }
              System.out.println("z");
          }
      }
      

    • Options
    • A. z
    • B. x z