1. Directly on the code:
Class Lockdemo{public static Final Object A_lock=new object ();p ublic static Final Object B_lock=new object ();} public class Threadlockdemo implements Runnable{public Boolean Flag;public Threadlockdemo (Boolean flag) {This.flag=flag ;} public void Run () {if (flag) {synchronized (Lockdemo.a_lock) {System.out.println ("if a_lock"); synchronized ( Lockdemo.b_lock) {System.out.println ("B_lock");}}} Else{synchronized (Lockdemo.b_lock) {System.out.println ("Else B_lock"); synchronized (Lockdemo.a_lock) { System.out.println ("A_lock");}}} public static void Main (string[] args) {//TODO auto-generated method Stubthreadlockdemo td1=new Threadlockdemo (false); Threadlockdemo td2=new Threadlockdemo (true); Thread t1=new thread (TD1); Thread t2=new thread (TD2); T1.start (); T2.start ();}}
2. There is a picture of the truth
An implementation of deadlock in Java multithreading problem