У меня много экземпляров одного и того же объекта, и я хотел бы запустить поток для каждого экземпляра. Мои потоки должны быть синхронизированы, поэтому каждый поток разделяет общий объект, который я блокирую каждый раз, как вы можете видеть в моем коде:
public Person(String name, Object1 o){
this.name = name;
this.obj1 = o;
}
public boolean addToList(){
boolean locked;
locked = obj1.getLock().tryLock();
System.out.println(this.name+" try to lock");
while (!locked){
try{
obj1.wait();
}catch (InterruptedException e){
System.out.println("Error!");
}
locked = obj1.getLock().tryLock();
}
System.out.println(this.name+" lock ok");
if(obj1.getPerson().size()<obj1.getNum()){
System.out.println("0 "+name+" list size: "+obj1.getPerson().size());
obj1.getPerson().add(this);
System.out.println("1 "+name+" list size: "+obj1.getPerson().size());
obj1.getLock().unlock();
System.out.println("Unlock ok");
obj1.notifyAll();
System.out.println("Notifyall ok");
return true;
}
return false;
}
Я не понимаю, почему после первого addToList (),другой не проснется!