Java Threads Interview
Questions
What are three ways in which a thread
can enter the waiting state? Or
What are different ways in which a thread can
enter the waiting state?
A
thread can enter the waiting state by the following ways:
1. Invoking its sleep() method,
2. By blocking on I/O
3. By unsuccessfully attempting to acquire an object's lock
4. By invoking an object's wait() method.
5. It can also enter the waiting state by invoking its (deprecated) suspend()
method.
What is the difference between yielding and
sleeping?
When
a task invokes its yield() method, it returns to the ready state, either from
waiting, running or after its creation. When a task invokes its sleep() method,
it returns to the waiting state from a running state.
How to create multithreaded program? Explain
different ways of using thread? When a thread is created and started, what is
its initial state? Or
Extending Thread class or implementing Runnable Interface. Which is
better?
You
have two ways to do so. First, making your class "extends" Thread
class. The other way is making your class implement "Runnable"
interface. The latter is more advantageous, cause when you are going for
multiple inheritance, then only interface can help. . If you are already
inheriting a different class, then you have to go for Runnable Interface.
Otherwise you can extend Thread class. Also, if you are implementing interface,
it means you have to implement all methods in the interface. Both Thread class
and Runnable interface are provided for convenience and use them as per the
requirement. But if you are not extending any class, better extend Thread class
as it will save few lines of coding. Otherwise performance wise, there is no
distinguishable difference. A thread is in the ready state after it has been
created and started.
What is mutual exclusion? How can you take
care of mutual exclusion using Java threads?
Mutual
exclusion is a phenomenon where no two processes can access critical regions of
memory at the same time. Using Java multithreading we can arrive at mutual
exclusion. For mutual exclusion, you can simply use the synchronized keyword
and explicitly or implicitly provide an Object, any Object, to synchronize on.
The synchronized keyword can be applied to a class, to a method, or to a block
of code. There are several methods in Java used for communicating mutually
exclusive threads such as wait( ), notify( ), or notifyAll( ). For example, the
notifyAll( ) method wakes up all threads that are in the wait list of an
object.
What is the difference between preemptive
scheduling and time slicing?
Under
preemptive scheduling, the highest priority task executes until it enters the
waiting or dead states or a higher priority task comes into existence. Under
time slicing, a task executes for a predefined slice of time and then re-enters
the pool of ready tasks. The scheduler then determines which task should
execute next, based on priority and other factors.
What invokes a thread's run() method?
After
a thread is started, via its start() method of the Thread class, the JVM
invokes the thread's run() method when the thread is initially executed.
What is the purpose of the wait(), notify(),
and notifyAll() methods?
The
wait(), notify() and notifyAll() methods are used to provide an efficient way
for thread inter-communication.
What is thread? What are the high-level thread
states?Or
What are the states associated in the thread?
A
thread is an independent path of execution in a system. The high-level thread
states are ready, running, waiting and dead.
What is deadlock?
When
two threads are waiting for each other and can’t proceed until the first thread
obtains a lock on the other thread or vice versa, the program is said to be in
a deadlock.
How does multithreading take place on a
computer with a single CPU?
The
operating system's task scheduler allocates execution time to multiple tasks.
By quickly switching between executing tasks, it creates the impression that tasks
execute sequentially.
What are synchronized methods and synchronized
statements?
Synchronized
methods are methods that are used to control access to an object. A thread only
executes a synchronized method after it has acquired the lock for the method's
object or class. Synchronized statements are similar to synchronized methods. A
synchronized statement can only be executed after a thread has acquired the
lock for the object or class referenced in the synchronized statement.
Can Java object be locked down for exclusive
use by a given thread?
Or
What happens when a thread cannot acquire a
lock on an object?
Yes.
You can lock an object by putting it in a "synchronized" block. The
locked object is inaccessible to any thread other than the one that explicitly
claimed it. If a thread attempts to execute a synchronized method or
synchronized statement and is unable to acquire an object's lock, it enters the
waiting state until the lock becomes available.
What’s the difference between the methods
sleep() and wait()?
The
sleep method is used when the thread has to be put aside for a fixed amount of
time. Ex: sleep(1000), puts the thread aside for exactly one second. The wait
method is used to put the thread aside for up to the specified time. It could
wait for much lesser time if it receives a notify() or notifyAll() call. Ex:
wait(1000), causes a wait of up to one second. The method wait() is defined in
the Object and the method sleep() is defined in the class Thread.
What is the difference between process and
thread?
A
thread is a separate path of execution in a program. A Process is a program in
execution.
What is daemon thread and which method is used
to create the daemon thread?
Daemon
threads are threads with low priority and runs in the back ground doing the
garbage collection operation for the java runtime system. The setDaemon()
method is used to create a daemon thread. These threads run without the
intervention of the user. To determine if a thread is a daemon thread, use the
accessor method isDaemon()
When
a standalone application is run then as long as any user threads are active the
JVM cannot terminate, otherwise the JVM terminates along with any daemon
threads which might be active. Thus a daemon thread is at the mercy of the
runtime system. Daemon threads exist only to serve user threads.
What do you understand by Synchronization? Or
What is synchronization and why is it
important? Or
Describe synchronization in respect to
multithreading? Or
What is synchronization?
With
respect to multithreading, Synchronization is a process of controlling the
access of shared resources by the multiple threads in such a manner that only
one thread can access a particular resource at a time. In non synchronized
multithreaded application, it is possible for one thread to modify a shared
object while another thread is in the process of using or updating the object's
value. Synchronization prevents such type of data corruption which may
otherwise lead to dirty reads and significant errors.
E.g. synchronizing a function:
public synchronized void Method1 () {
// method code.
}
E.g. synchronizing a block of code inside a function:
public Method2 (){
synchronized (this) {
// synchronized code here.
}}
When you will synchronize a piece of your code?
When
you expect that your shared code will be accessed by different threads and
these threads may change a particular data causing data corruption, then they
are placed in a synchronized construct or a synchronized method.
Why would you use a synchronized block vs.
synchronized method?
Synchronized
blocks place locks for shorter periods than synchronized methods.
What is an object's lock and which objects
have locks?
Answer:
An object's lock is a mechanism that is used by multiple threads to obtain
synchronized access to the object. A thread may execute a synchronized method
of an object only after it has acquired the object's lock. All objects and
classes have locks. A class's lock is acquired on the class's Class object.
Can a lock be acquired on a class?
Yes,
a lock can be acquired on a class. This lock is acquired on the class's Class
object.
What state does a thread enter when it
terminates its processing?
When
a thread terminates its processing, it enters the dead state.
How would you implement a thread pool?
public
class ThreadPool implements ThreadPoolInt
This
class is an generic implementation of a thread pool, which takes the following
input
a)
Size of the pool to be constructed
b)
Name of the class which implements Runnable and constructs a thread pool with
active threads that are waiting for activation. Once the threads have finished
processing they come back and wait once again in the pool.
This
thread pool engine can be locked i.e. if some internal operation is performed
on the pool then it is preferable that the thread engine be locked. Locking
ensures that no new threads are issued by the engine. However, the currently
executing threads are allowed to continue till they come back to the
passivePool.
Is there a separate stack for each thread in
Java?
Yes. Every thread maintains its own separate stack, called
Runtime Stack but they share the same memory. Elements of the stack are the
method invocations,
called activation records or stack frame. The activation record contains
pertinent information about a method like local variables.
No comments:
Post a Comment