Q: What's the difference between Thread
and Runnable
types?
A: A Java Thread
controls the main path of execution in an application. When you invoke the Java Virtual Machine with the java
command, it creates an implicit thread in which to execute the main
method. The Thread
class provides a mechanism for the first thread to start-up other threads to run in parallel with it.
The Runnable
interface defines a type of class that can be run by a thread. The only method it requires is run
, which makes the interface very easy to to fulfil by extending existing classes. A runnable class may have custom constructors and any number of other methods for configuration and manipulation.
Q: How does the run()
method in Runnable
work?
A: It may help to think of the run
method like the main
method in standard single threaded applications. The run
method is a standard entry point to run or execute a class. The run
method is normally only executed in the context of an independent Thread
, but is a normal method in all other respects.
More details available to subscribers:
How does the run()
method in Runnable
work?
Q: A Thread
is runnable, how does that work?
A: The Thread
class' run
method normally invokes the run
method of the Runnable
type it is passed in its constructor. However, it is possible to override the thread's run
method with your own.
More details available to subscribers:
A Thread
is runnable, how does that work?
Q: Why not override Thread
to make a Runnable
?
A: There is little difference in the work required to override the Thread
class compared with implementing the Runnable
interface, both require the body of the run()
method. However, it is much simpler to make an existing class hierarchy runnable because any class can be adapted to implement the run method. A sub-class of Thread
cannot extend any other type, so application-specific code would have to be added to it rather than inherited.
Separating the Thread
class from the Runnable
implementation also avoids potential synchronization problems between the thread and the run method. A separate Runnable
generally gives greater flexibility in the way that runnable code is referenced and executed.
Q: What's the difference between a thread's start()
and run()
methods?
A: The separate start()
and run()
methods in the Thread
class provide two ways to create threaded programs. The start()
method starts the execution of the new thread and calls the run()
method. The start()
method returns immediately and the new thread normally continues until the run()
method returns.
The Thread
class' run()
method does nothing, so sub-classes should override the method with code to execute in the second thread. If a Thread
is instantiated with a Runnable
argument, the thread's run()
method executes the run()
method of the Runnable
object in the new thread instead.
Depending on the nature of your threaded program, calling the Thread
run()
method directly can give the same output as calling via the start()
method, but in the latter case the code is actually executed in a new thread.
Q: Can I implement my own start()
method?
A: The Thread
start()
method is not marked final
, but should not be overridden. This method contains the code that creates a new executable thread and is very specialised. Your threaded application should either pass a Runnable
type to a new Thread
, or extend Thread
and override the run()
method.
0 comments:
Post a Comment