public class CodeTest implements Runnable {
private boolean flag;
private static Object o1 = new Object(), o2 = new Object();
CodeTest(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
if (flag) {
synchronized (o1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o2) {
System.out.println(o2);
}
}
} else {
synchronized (o2) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (o1) {
System.out.println(o1);
}
}
}
}
public static void main(String[] args) {
new Thread(new CodeTest(true)).start();
new Thread(new CodeTest(false)).start();
}
}