Java Programming - Threads - Discussion

Discussion Forum : Threads - Finding the output (Q.No. 15)
15.
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(); 
    } 
}
The code fails to compile in the main() method
The code fails to compile in the run() method
Only the text "In run" will be displayed
The text "In run" followed by "Leaving run" will be displayed
Answer: Option
Explanation:
No answer description is available. Let's discuss.
Discussion:
13 comments Page 1 of 2.

Rksh25 said:   5 years ago
It works the same whether you call it with an instance or Thread.yield(). The reason is there no code to display in the main method after start() a child thread. write some SOPs in main after start a child thread. CPU gives the chance to the main thread. Since in this program there a 2 threads main, Thread-0.
(1)

Manish said:   1 decade ago
Yield is a static method. It makes the currently running thread head back to the runnable state to allow other threads of same priority to get their turn, but there is no such guarantee.

Sudhansu said:   1 decade ago
yield() is a static method . Thes how we are invoking it for an instance using this.

Smith said:   1 decade ago
What is output for this program ?

Like
"In run
Leaving run"
or
like
"In run Leaving run"

Venky said:   1 decade ago
Is this possible to call super class's static method in sub class's non-static method without specifying classname(ie.yeild()).

Shanki said:   1 decade ago
yield() allow other Threads to execute by stopping the current Thread. Since there are no such other Threads present, therefore yield() not blocks the current Thread and execution continues after yield().

Vikas grover said:   1 decade ago
I think it will give an compile time error, as we yield is static method, hence how can we call a static method in non static method. If we correct this like Thread.yield () ; then it will print in run leaving run, because yield method stop current thread and allow other thread to invoke, hence there is no other thread and this will continue after calling yield.

Anonymous said:   10 years ago
Output will be :

In run.
Leaving run.

Its fine for compilation, just because calling yield() inside run().

Srinivas said:   10 years ago
Yield method causes to pause the current executing thread and give the chance for remaining waiting thread of the same priority. If there are no waiting threads or all waiting threads are having low priority then the same thread will continue it's execution.

Output will be :

In run.
Leaving run.

Vinu said:   9 years ago
Yes @Srinivas you are correct and also it is depending on "thread scheduler" since there is no other thread so same thread will continue the process. I hope this if I am wrong please tell.


Post your comments here:

Your comments will be displayed after verification.