Skip to main content

What is a Deadlock situation in Java? What are the minimum requirements for a Deadlock situation in a program in Java? How can we prevent a Deadlock in Java?

 

Photo by ThisIsEngineering from Pexels

What is a Deadlock situation in Java? 

A Deadlock is a situation in which two or more threads are waiting on each other to release a resource. Each thread is waiting for a resource that is held by the other waiting thread. At times there is a circular wait when more than two threads are waiting on each other’s resources.


What are the minimum requirements for a Deadlock situation in a program in Java?

For a deadlock to occur following are the minimum requirements:

1. Mutual exclusion: There has to be a resource that can be accessed by only one thread at any point of time.

2. Resource holding: One thread locks one resource and holds it, and at the same time it tries to acquire lock on another mutually exclusive resource.

3. No preemption: There is no pre-emption mechanism by which resource held by a thread can be freed after a specific period of time.

4. Circular wait: There can be a scenario in which two or more threads lock one resource each and they wait for each other’s resource to get free. 

This causes circular wait among threads for same set of resources.


How can we prevent a Deadlock in Java?

To prevent a Deadlock from occurring at least one requirement for a deadlock has to be removed:

1. Mutual exclusion: We can use optimistic locking to prevent mutual exclusion among resources.

2. Resource holding: A thread has to release all its exclusive locks if it does not succeed in acquiring all exclusive locks for resources required.

3. No preemption: We can use timeout period for an exclusive lock to get free after a given amount of time.

4. Circular wait: We can check and ensure that circular wait does not occur, when all exclusive locks have been acquired by all the threads in the same sequence.

Comments

Popular posts from this blog

8 common methods for server performance optimization

  1. Use an in-memory database In-memory database is actually a database that puts data in memory and operates directly. Compared with the disk, the data read and write speed of the memory is several orders of magnitude higher. Saving the data in the memory can greatly improve the performance of the application compared to accessing it from the disk. The memory database abandoned the traditional way of disk data management, redesigned the architecture based on all data in memory, and made corresponding improvements in data caching, fast algorithms, and parallel operations, so the data processing speed is faster than that of traditional databases. Data processing speed is much faster.       But the problem of security can be said to be the biggest flaw in the memory database. Because the memory itself has the natural defect of power loss, when we use the memory database, we usually need to take some protection mechanisms for the data on the memory in advance, such...

Recursion-maze problem - Rat in the Maze - Game

  package com.bei.Demo01_recursion; public class MiGong {     public static void main(String[] args)  {         //First create a two-dimensional array to simulate the maze         int [][]map=new int[8][7];         //Use 1 for wall         for (int i = 0; i <7 ; i++) {             map[0][i]=1;             map[7][i]=1;         }         for (int i = 0; i <8 ; i++) {             map[i][0]=1;             map[i][6]=1;         }         //Set the bezel         map[3][1]=1;         map[3][2]=1;         //Output         for (int i = 0; i <8 ; i++) {             for (int j = 0; j ...

AirBnB Infographic Journey to IPO

  Full Post at  https://techpomelo.com/2020/10/infographics-airbnb-milestone-journey-to-ipo/