Java Locks / Condition Variable - signal()没有唤醒线程

时间:2016-08-05 16:30:10

标签: java multithreading signals condition-variable reentrantlock

因此被困在这里,试图寻找答案,找不到任何答案。 简单地说,我一直试图让火车向乘客发信号通知车站。信号保持循环,但乘客永远不会醒来。

我在signal / await之前打印出hashcode,它们是相同的,所以它们使用的条件应该相同。

需要锁定/条件,因此我无法使用其他同步技术......

火车:

currStation.getLock().lock();

try{

System.out.println(currStation.getTrainCond().hashCode());
while(seats > 0 && currStation.getWaitingPassengers() > 0){
    currStation.getTrainCond().signal();
    //thread doesn't end.
    try {
            thread.sleep(10);
    } catch (InterruptedException e) {
                    e.printStackTrace();
    }
}

try {
    thread.sleep(1000);
} catch (InterruptedException e1) {
    e1.printStackTrace();
}

}
finally{
    currStation.getLock().unlock();
}

乘客:

        station.getLock().lock();
    try {

        System.out.println(station.getTrainCond().hashCode());
        station.getTrainCond().await();

        while(!station.getSeat(this)){
            //keep running
            try {
                thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        };

    } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
    }finally{
            station.getLock().unlock();
        }
    }

站& currStation是同一个对象;谢谢:)!

0 个答案:

没有答案