|
Java Threads Interview Questions - 1
1)What is threaded programming and when is it used?
Threaded programming is normally used when a program is
required to do more than one task at the same time. Threading is often used in
applications with graphical user interfaces; a new thread may be created to do
some processor-intensive work while the main thread keeps the interface
responsive to human interaction.
The Java programming language has threaded programming facilities built in, so
it is relatively easy to create threaded programs. However, multi-threaded
programs introduce a degree of complexity that is not justified for most
simple command line applications.
A: These methods are detailed on the Java Software
Development Kit JavaDoc page for the Object class, they are to implement
threaded programming for all subclasses of Object.
A: The static Thread.sleep(long) method maintains control of thread
execution but delays the next action until the sleep time expires. The wait
method gives up control over thread execution indefinitely so that other
threads can run.
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.
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.
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.
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 subclass 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.
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.
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.
A: It depends whether the method affects method local
variables, class static or instance variables. If only method local variables
are changed, the value is said to be confined by the method and is
not prone to threading issues.
|