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.
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?
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?
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.
}
}
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.
called activation records or stack frame. The activation record contains pertinent information about a method like local variables.
No comments:
Post a Comment