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)

Sujata said:   7 years ago
Output is:
In run
Leaving run

Because, yeild() method only delays the current thread and gives the chance to same priority thread. In this case, there is no any thread present, so after some delay in will continue the execution.

Meghna said:   8 years ago
yield() basically means that the thread is not doing anything particularly important and if any other threads or processes need to be run, they should.

Otherwise, the current thread will continue to run.

Kratika said:   9 years ago
Yield method only delays the current thread for some time or can it shift the priority.

Vinu said:   10 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.

Srinivas said:   1 decade 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.

Anonymous said:   1 decade ago
Output will be :

In run.
Leaving run.

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

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.

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().

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()).


Post your comments here:

Your comments will be displayed after verification.