Многопоточность. Задача - заправная станция
Прохожу многопоточность , помогите в решении такой задачи. Заправная станция заправляет 3 автомобиля. У станции есть общее количество литров . Запрка авто - это поток в котором указывается какая машина и на сколько литров заправляется, время на запраку(от 3 - 10 секунд) и сообщение об остатке литров на станциию. Как сделать так, чтобы после завершения каждого потока уменьшалось общее количество литров на станции. Сейчас при каждой заправке литры отнимаются один раз от общего количества топлива на станции - такой вывод :
Starting refuel Car 1 - 50 liters
Petrol station remainder - 450 liters
Starting refuel Car 3 - 70 liters
Petrol station remainder - 430 liters
Starting refuel Car 2 - 60 liters
Petrol station remainder - 440 liters
вот мой код :
public class PetrolStation implements Runnable{
private volatile int amount = 500 ;
private int fuel;
private ReentrantLock locker;
public PetrolStation(int fuel, ReentrantLock locker) {
this.fuel = fuel;
this.locker = locker;
}
@Override
public void run() {
locker.lock();
System.out.println("Starting refuel " + Thread.currentThread().getName() + fuel + " liters");
try {
int duration = getRandomInRange(3000, 10000);
Thread.sleep(duration);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("Petrol station remainder - " + doRefuel() + " liters");
locker.unlock();
}
private int doRefuel(){
return amount - fuel;
}
public static int getRandomInRange(int begin, int end) {
double random = Math.random();
return (int) (random * (end - begin + 1)) + begin;
}
}
И мейн :
public class MainPetrolStation {
private static final int SIZE = 3;
private static final ReentrantLock locker = new ReentrantLock();
public static void main(String[] args) throws InterruptedException {
Thread[] thread = new Thread[SIZE];
thread[0] = new Thread(new PetrolStation(50, locker), "Car 1 - ");
thread[1] = new Thread(new PetrolStation(60, locker), "Car 2 - ");
thread[2] = new Thread(new PetrolStation(70, locker), "Car 3 - ");
for (int i = 0; i < SIZE; i++) {
thread[i].start();
}
}