gpt4 book ai didi

java - 线程安全读/写计数器

转载 作者:行者123 更新时间:2023-11-30 07:51:03 30 4
gpt4 key购买 nike

我正在尝试使用线程安全方法创建 2 个读/写计数器的线程。

我已经编写了一些代码来尝试对此进行测试,但是读取线程只是读取计数器的最大值 (1000)

主要内容:

public static void main(String[] args) {

Counter c = new Counter();

Thread inc = new Increment(c);
Thread read = new Read(c);

inc.start();
read.start();

}

计数器:

public class Counter {

private int count;

public Counter() {
count = 0;
}

public synchronized void increment() {
count++;
}

public synchronized int getVal() {
return count;
}

}

增量:

public class Increment extends Thread {

private static final int MAX = 1000;
private Counter myCounter;

public Increment(Counter c) {
myCounter = c;
}

public void run() {
for (int i = 0; i < MAX; i++) {
myCounter.increment();
}
}
}

阅读:

public class Read extends Thread {

private static final int MAX = 1000;
private Counter myCounter;

public Read(Counter c) {
myCounter = c;
}

public void run() {
for (int i = 0; i < MAX; i++) {
System.out.println(myCounter.getVal());
}
}
}

我是否最好使用 Atomic Integer 来保存计数器的值以允许我安全地递增它并获取该值?

最佳答案

您的代码完全没问题。碰巧您的增量线程在读取线程有机会读取之前完成了所有增量。 1,000 次增量几乎不需要任何时间。

关于java - 线程安全读/写计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47515227/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com