public class Test {
private static final Object o1 = new Object();
private static final Object o2 = new Object();
/**
* @param args
*/
public static void main(String[] args) {
new Thread() {
public void run() {
while (true) {
System.out.println("---线程1执行了");
synchronized (o1) {
System.out.println("+++++线程1锁住了01");
synchronized (o2) {
System.out.println("**********线程1锁住了02");
}
}
}
};
}.start();
new Thread() {
public void run() {
while (true) {
System.out.println("---线程2执行了");
synchronized (o2) {
System.out.println("++++++线程2锁住了02");
synchronized (o1) {
System.out.println("***********线程2锁住了01");
}
}
}
};
}.start();
}
private static final Object o1 = new Object();
private static final Object o2 = new Object();
/**
* @param args
*/
public static void main(String[] args) {
new Thread() {
public void run() {
while (true) {
System.out.println("---线程1执行了");
synchronized (o1) {
System.out.println("+++++线程1锁住了01");
synchronized (o2) {
System.out.println("**********线程1锁住了02");
}
}
}
};
}.start();
new Thread() {
public void run() {
while (true) {
System.out.println("---线程2执行了");
synchronized (o2) {
System.out.println("++++++线程2锁住了02");
synchronized (o1) {
System.out.println("***********线程2锁住了01");
}
}
}
};
}.start();
}
}
////////////////////////////////////////////////////////////////////////////////////////////
结果
////////////////////////////////////////////////////////////////////////////////////////////
---线程1执行了
---线程2执行了
+++++线程1锁住了01
++++++线程2锁住了02
当然上面的结果是理论
也会出现 02 可以打开的情况 或者 01
这是因为两个线程并行执行 看看那个占用 CPU 占得快
占得快的就可以开个锁
理论是双方都无法在锁住对方 自己运行理解即可
---线程1执行了
+++++线程1锁住了01
**********线程1锁住了02
---线程1执行了
---线程2执行了
+++++线程1锁住了01
++++++线程2锁住了02