How to create deadlock in your code.
Anonymous
Though, I made few mistakes on that useless online IDE but mostly code was correct & idea was completely correct. Below is the working which has my 90% solution I gave during interview. public class CDKSample2 { public static void main(String[] args) throws InterruptedException { Resource1 resource1 = new Resource1(); Resource2 resource2 = new Resource2(); Thread t1 = new Thread(new Deadlock(resource1, resource2, 1)); Thread t2 = new Thread(new Deadlock(resource1, resource2, 2)); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println("Completed...."); } static class Deadlock implements Runnable { int order; Resource1 resource1; Resource2 resource2; public Deadlock(Resource1 resource1, Resource2 resource2, int order) { this.order = order; this.resource1 = resource1; this.resource2 = resource2; resource1.setResource2(resource2); resource2.setResource1(resource1); } @Override public void run() { if(order == 1) { resource1.getResource(); } else if(order == 2) { resource2.getResource(); } } } static class Resource1 { Resource2 resource2 = null; public Resource1() { } public void setResource2(Resource2 resource2) { this.resource2 = resource2; } public synchronized void getResource() { System.out.println("Resource1"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } resource2.getResource(); } } static class Resource2 { Resource1 resource1 = null; public Resource2() { } public void setResource1(Resource1 resource1) { this.resource1 = resource1; } public synchronized void getResource() { System.out.println("Resource2"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } resource1.getResource(); } } }
Check out your Company Bowl for anonymous work chats.