package com.itheima.test04;
import java.util.Random;
public class TestSynchronized implements Runnable{
//为什么只有静态的锁才能锁住程序?
public static Object A = new Object();
private static Object B = new Object();
private int i = new Random().nextInt(1);
@Override
public void run() {
while(true){
if(i % 2 == 0){
synchronized (A) {
System.out.println(i);
System.out.println("Lock-A");
synchronized (B) {
System.out.println("Lock-B");
}
}
} else {
synchronized (B) {
System.out.println(i);
System.out.println("Lock--B");
synchronized (A) {
System.out.println("Lock--A");
}
}
}
i++;
}
}
}
你把对象放外面呢?你是想测试死锁吧。非static自己线程用自己锁。你这个锁没用啊
m没看代码.回答问题:因为静态是同一个..锁的目标不是同一个.自然就不是同一个锁
//为什么只有静态的锁才能锁住程序?貌似这种说法不科学吧
这个要看你调用情况,这个也同c#的lock一样
1.为什么出现死锁,如果两个线程在跑run,一个进入是上面一块,一个进入下面块就死锁了。第一个要B时,下面在用,他只能等,但是下面要等A所以互相等待。
2.为什么用静态的,如果不用静态的怕出现这种情况 new TestSynchronized().run() 这种方式就永远没有锁的效果。因为每个对象都是独立的,但是如果是静态的就不会了,就有效果。