Как разбудить темы разных экземпляров? - PullRequest
0 голосов
/ 09 ноября 2019

У меня много экземпляров одного и того же объекта, и я хотел бы запустить поток для каждого экземпляра. Мои потоки должны быть синхронизированы, поэтому каждый поток разделяет общий объект, который я блокирую каждый раз, как вы можете видеть в моем коде:

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 (),другой не проснется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...