Deadlock is a programming situation where two or more threads are blocked forever, this situation arises with at least two threads and two or more resources.
Here is a perfect implementation of Deadlock situation.
Here is a perfect implementation of Deadlock situation.
public static void main(String[] args) { //Limited equipment need to share by 2 nurse. Equipment scissor = new Equipment("scissor"); Equipment bandage = new Equipment("bandage"); Equipment anticeptic = new Equipment("anticeptic"); //Maria want to use scissor, bandage and antiseptic Equipment e1[] = new Equipment[]{scissor,bandage,anticeptic}; Nurse nurse1 = new Nurse("Maria",e1); //Tina want to use bandage,antiseptic and scissor Equipment e2[] = new Equipment[]{bandage,anticeptic,scissor}; Nurse nurse2 = new Nurse("Tina",e2); //Both are different thread.. nurse1.start(); nurse2.start(); }Nurse.java
class Nurse extends Thread{ String name=null; Equipment equipment[]; Nurse(String n,Equipment[]e){ this.name = n; this.equipment = e; } boolean stillAlive(long startTime){ long waitTime = (System.currentTimeMillis() - startTime)/1000; if(waitTime > 30){ System.out.println(this.name + "'s patient certified died after "+ waitTime + " sec"); return false; }else{ return true; } } public void run(){ long startTime = System.currentTimeMillis(); int i=0; while(i < equipment.length){ //check patient to see still alive or not. if(!stillAlive(startTime)){ //certified dead. break; } //trying to get equipment if(equipment[i].lock(this.name)){ System.out.println(this.name + " got " + equipment[i].name); i++; if(i==equipment.length){ System.out.println(this.name + " saved the patient"); } }else{ System.out.println(this.name + " waiting " + equipment[i].name + "(" + equipment[i].owner + " is holding)"); } try { //simulate wait for other nurse to release long sleepPeriod = Math.abs(new Random().nextLong()%10000); Thread.sleep(sleepPeriod); } catch (InterruptedException e) { e.printStackTrace(); } } //finish use.. release lock for(int j=0;j < equipment.length; j++){ equipment[j].release(); } } }Equipment.java
class Equipment{ String name=null; String owner=null; Equipment(String n){ this.name = n; } synchronized boolean lock(String o){ if(owner==null){ this.owner = o; return true; } return false; } synchronized void release(){ this.owner = null; } }
Comments
Post a Comment