package com.frameworkset;


public class TestLock {
	static Deadlocker syncTest = new Deadlocker();

	public static void main(String[] args) {
		ThreadLock t = new ThreadLock(1);
		t.start();
		ThreadLock t1 = new ThreadLock(2);
		t1.start();

	}

	static class ThreadLock extends Thread {
		int num;

		public ThreadLock(int i) {
			this.num = i;
		}

		public void run() {
			if (num == 1) {
				while (true) {
					syncTest.method1(1);
				}
			} else {
				while (true) {
					syncTest.method2(1);
				}
			}
		}
	}

	static class Deadlocker {
		int field_1;

		private Object lock_1 = new int[1];

		int field_2;

		private Object lock_2 = new int[1];

		public void method1(int value) {
			synchronized (lock_1) {
				synchronized (lock_2) {
					field_1 = 0;
					field_2 = 0;
					System.out.println("call method1");
				}
			}
		}

		public void method2(int value) {
			synchronized (lock_2) {
				synchronized (lock_1) {
					field_1 = 0;
					field_2 = 0;
					System.out.println("call method2");
				}
			}
		}
	}

}
