0% found this document useful (0 votes)
98 views14 pages

Deadlock and Interprocess Communication

Deadlock in Java occurs when two threads are waiting for locks held by each other, resulting in neither being able to continue. Inter-thread communication allows synchronized threads to coordinate using wait(), notify(), and notifyAll() methods. These methods pause and resume thread execution to share access to a monitor. For example, a withdraw thread may wait if funds are insufficient, until a deposit thread notifies it after adding more money.

Uploaded by

Joel Joseph
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
98 views14 pages

Deadlock and Interprocess Communication

Deadlock in Java occurs when two threads are waiting for locks held by each other, resulting in neither being able to continue. Inter-thread communication allows synchronized threads to coordinate using wait(), notify(), and notifyAll() methods. These methods pause and resume thread execution to share access to a monitor. For example, a withdraw thread may wait if funds are insufficient, until a deposit thread notifies it after adding more money.

Uploaded by

Joel Joseph
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 14

Deadlock and interprocess

Communication
Deadlock in java

• Deadlock in java is a part of multithreading. Deadlock can occur in a


situation when a thread is waiting for an object lock, that is acquired
by another thread and second thread is waiting for an object lock that
is acquired by first thread. Since, both threads are waiting for each
other to release the lock, the condition is called deadlock.
Inter-thread communication in Java

• Inter-thread communication or Co-operation is all about allowing


synchronized threads to communicate with each other.
• Cooperation (Inter-thread communication) is a mechanism in which a
thread is paused running in its critical section and another thread is
allowed to enter (or lock) in the same critical section to be executed.It
is implemented by following methods of Object class:
• wait()
• notify()
• notifyAll()
wait() method

• Causes current thread to release the lock and wait until either
another thread invokes the notify() method or the notifyAll() method
for this object, or a specified amount of time has elapsed.
• The current thread must own this object's monitor, so it must be
called from the synchronized method only otherwise it will throw
exception.
Method Description

public final void wait()throws waits until object is notified.


InterruptedException
public final void wait(long waits for the specified amount of
timeout)throws time.
InterruptedException
notify() method

• Wakes up a single thread that is waiting on this object's monitor. If


any threads are waiting on this object, one of them is chosen to be
awakened. The choice is arbitrary and occurs at the discretion of the
implementation. Syntax:
• public final void notify()
notifyAll() method

• Wakes up all threads that are waiting on this object's monitor. Syntax:
• public final void notifyAll()

Understanding the process of inter-thread
communication
• Threads enter to acquire lock.
• Lock is acquired by on thread.
• Now thread goes to waiting state if you call wait() method on the object.
Otherwise it releases the lock and exits.
• If you call notify() or notifyAll() method, thread moves to the notified state
(runnable state).
• Now thread is available to acquire lock.
• After completion of the task, thread releases the lock and exits the monitor
state of the object.
Difference between wait and sleep

wait() sleep()

wait() method releases the lock sleep() method doesn't release


the lock.
is the method of Object class is the method of Thread class
is the non-static method is the static method
is the non-static method is the static method
should be notified by notify() or after the specified amount of
notifyAll() methods time, sleep is completed.
class Customer{
int amount=10000;

synchronized void withdraw(int amount){


System.out.println("going to withdraw...");

if(this.amount<amount){
System.out.println("Less balance; waiting for deposit...");
try{wait();}catch(Exception e){}
}
this.amount-=amount;
System.out.println("withdraw completed...");
}
synchronized void deposit(int amount){
System.out.println("going to deposit...");
this.amount+=amount;
System.out.println("deposit completed... ");
notify();
}
}
class Test{
public static void main(String args[]){
Customer c=new Customer();

Mythread1 t1=new Mythread1(c);


Mythread2 t2=new Mythread2(c);
t1.start();
t2.start();

}}
class MyThread1 extends Thread{
Customer c;
Mythread1(Customer c)
{this.c=c}
public void run(){
c.withdraw(15000);}
}
class MyThread2 extends Thread{
Customer c;
Mythread2(Customer c)
{this.c=c}

public void run(){


c.deposit(10000);}
}

You might also like