我将以一个例子来解释。我有一个建筑工地,需要建造一座建筑。让我们说建筑需要砖和水泥才能继续建造。 (在当前材料状态下具有两个私有变量的线程对象)。该建筑有一辆卡车和一辆面包车,为其提供所需材料(水泥车和砖车,两个独立的螺纹物)。建筑物每秒花费100公斤水泥和50公斤砖。如果两者中的任何一个都小于任何时刻,则施工停止,直到卡车和货车为其提供足够的材料。
我不知道如何解决这个问题,因为有两个条件需要满足(足够的条款和足够的水分)。为了解决这个问题,以下部分代码是否有意义?
Building extends Thread
//...
public void run() {
super.run();
lock.lock();
while (true) {
if (cement < 100 || bricks < 50)
try {
insufficientBricksawait(); //Can you do something like this?
insufficientCementawait();
} catch (InterruptedException e) {
e.printStackTrace();
}
spent += 150;
bricks -= 50;
cement -= 100;
try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
当必须等待两个线程通知它满足条件时,我如何向Building发信号以继续工作?