// CS 1621 // Deadlock example in Java class shared { private int id; private int data; public shared(int newdata, int newid) { data = newdata; id = newid; } public synchronized int getdata() { try { Thread.sleep(1000); } catch (InterruptedException e) {} System.out.println("About to return data for " + id); return data; } public synchronized void setdata(int newdata) { try { Thread.sleep(1000); } catch (InterruptedException e) {} System.out.println("About to set data for " + id); data = newdata; } public synchronized void swap(shared rhs) { System.out.println("Swap called for data " + id); int temp = rhs.getdata(); rhs.setdata(getdata()); setdata(temp); } } public class deadlock implements Runnable { private shared [] theData; private Thread firstThread; private Thread secondThread; public deadlock() { theData = new shared[2]; theData[0] = new shared(10,0); theData[1] = new shared(20,1); firstThread = new Thread(this); secondThread = new Thread(this); firstThread.start(); secondThread.start(); } public void run() { if (Thread.currentThread() == firstThread) { theData[0].swap(theData[1]); } else { theData[1].swap(theData[0]); } } public static void main(String [] args) { deadlock theObject = new deadlock(); } }