我试图在java中使用for循环创建多个线程,以便它们共享相同的变量计数器。我做错了,因为我希望计数器为每个线程递增。
这是以下代码的输出:
柜台:1 柜台:1
柜台:1
public static void main(String[] args) {
int numThreads = 3;
for (int i = 0; i < numThreads; i++) {
Create c = new Create();
Thread thread = new Thread(c);
thread.start();
}
}
public class Create implements Runnable {
int counter = 0;
public void run() {
counter++;
System.out.println("Counter: " + counter);
}
}
答案 0 :(得分:9)
static volatile int counter = 0;
并且所有3个线程都将共享它。
请注意,虽然波动性负责可见性(当一个线程更新它时 - 其他线程可以看到更改)它不会处理修改的原子性,因为你应该同步你的部分增加它,或者更好的是,使用AtomicInteger
答案 1 :(得分:2)
我的建议,(以及选择alfasin的编辑),请考虑这个Create类实现:
import java.util.concurrent.atomic.AtomicInteger;
public class Create implements Runnable {
static AtomicInteger classCounter = new AtomicInteger();
AtomicInteger objCounter = new AtomicInteger();
public void run() {
System.out.println("Class Counter: " + classCounter.incrementAndGet());
System.out.println("Object Counter: " + objCounter.incrementAndGet());
}
}