0

我用 Java 编写了这段代码Runnable,但我的教授希望我添加AtomicInteger,以免线程干扰。我该怎么做呢?我已经尝试查找如何在代码中使用它的示例,但我不知道在这种情况下该怎么做。

public class GarageWorker {
    public static void main(String[] args) {
        System.out.println("We are going to count the vehicles in the garage");
        System.out.println();
        System.out.println("There are 50 vehicles in the garage to start with!");
        System.out.println();

        GarageWorker garage = new GarageWorker(50);

        Runnable vehicleEnter = garage.new Enter();
        Runnable vehicleExit = garage.new Exit();

        Thread thread1 = new Thread(vehicleEnter);
        Thread thread2 = new Thread(vehicleExit);

        thread1.start();
        thread2.start();
    }

    public GarageWorker(int initialCarCount) {
        counter = initialCarCount;
    }

    public int counter;

    public class Enter implements Runnable {
        public Enter() {

        }

        public int increaseVehicleCount() {
            return ++counter;
        }

        public void run() {
            while (counter < 100) {
                System.out.println("One vehicle entered the garage now there are " + increaseVehicleCount());
            }
        }
    }

    public class Exit implements Runnable {
        public Exit() {

        }

        public int decreaseVehicleCount() {
            return --counter;
        }

        public void run() {
            while (counter > 0) {
                System.out.println("One vehicle left the garage now there are " + decreaseVehicleCount());
            }
        }
    }
}

代码运行良好,但我的教授希望我AtomicInteger在代码中实现该类。

4

1 回答 1

2

我假设您的教授希望您更改counterAtomicInteger. 首先,您要导入AtomicInteger并更改声明counter和构造函数以反映这一点。

import java.util.concurrent.atomic.AtomicInteger;
public GarageWorker(int initialCarCount) {
    counter = new AtomicInteger(initialCarCount);
}

public AtomicInteger counter;

此外,您想更改increaseVehicleCountanddecreaseVehicleCount方法以使用AtomicInteger而不是int.

public int increaseVehicleCount() {
    return counter.incrementAndGet();
}
public int decreaseVehicleCount() {
    return counter.decrementAndGet();
}

incrementAndGetdecrementAndGet就像他们说的那样做:它们增加(或减少)并随后返回新值。有关更多信息,请查看Javadoc

干杯!

于 2019-10-14T23:05:27.653 回答