1.我在一个方法里面加了两个锁,锁对象分别 是两个实例,
有一个实例会将本实例的线程挂起,
按理说另就只会执行另外一个同步代码块里的内容,
真实情况是两个都已经挂起了,
我的理解是只有锁对象是类class才会两个都挂起,
class Customer implements Runnable{
Product p;
Product p1;
public Customer(Product p,Product p1){
this.p = p;
this.p1= p1;
}
public Customer(Product p){
this.p = p;
}
@Override
public void run() {
while(true){
System.out.println("我是消费者被执行了");
synchronized (p1) {
System.out.println(p1);
System.out.println("hellll");
try {
Thread.sleep(222);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
synchronized (p) {
if(p.flag){
System.out.println("消费了"+p.name+"价格:"+p.price);
// p.flag=false;
p.notify();
}else {
try {
Thread.sleep(1333);
p.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
Thread cus1 = new Thread(customer1);
cus1.start();