发布
社区首页 >问答首页 >如何让AtomicInteger在Runnable类中工作

如何让AtomicInteger在Runnable类中工作
EN

Stack Overflow用户
提问于 2019-10-15 06:44:39
回答 1查看 253关注 0票数 0

我用Java语言把这段代码写成Runnable,但是我的教授要我添加AtomicInteger,这样就没有线程干扰了。我该怎么做呢?我试过在代码中查找如何使用它的示例,但我不知道在这种情况下该怎么做。

代码语言:javascript
代码运行次数:0
复制
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类。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-15 07:05:28

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

代码语言:javascript
代码运行次数:0
复制
import java.util.concurrent.atomic.AtomicInteger;
代码语言:javascript
代码运行次数:0
复制
public GarageWorker(int initialCarCount) {
    counter = new AtomicInteger(initialCarCount);
}

public AtomicInteger counter;

此外,您还希望更改increaseVehicleCountdecreaseVehicleCount方法,以便使用AtomicInteger而不是int

代码语言:javascript
代码运行次数:0
复制
public int increaseVehicleCount() {
    return counter.incrementAndGet();
}
代码语言:javascript
代码运行次数:0
复制
public int decreaseVehicleCount() {
    return counter.decrementAndGet();
}

正如decrementAndGetincrementAndGet所做的那样:它们会递增(或递减),然后返回新值。有关更多信息,请查看the Javadoc

干杯!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58384928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档