【发布时间】:2017-02-28 14:33:49
【问题描述】:
我正在运行以下课程。
public class RunThreads implements Runnable {
static int i;
public static void main(String[] args) {
RunThreads job = new RunThreads();
Thread alpha = new Thread(job);
Thread beta = new Thread(job);
alpha.setName("Alpha");
beta.setName("beta");
alpha.start();
beta.start();
}
public void run(){
for(;i<10;i++){
System.out.println(Thread.currentThread().getName() + i);
}
}
}
我的输出是:
beta0
beta1
Alpha0
beta2
beta4
beta5
beta6
Alpha3
Alpha8
beta7
Alpha9
我知道每次执行它都会得到不同的输出。我的问题是,对于alpha 和beta 线程,即Alpha0 和beta0,为什么输出的i 值两次为0。
i 的值已被beta 线程增加到1。那么,alpha 线程如何打印出Alpha0
我可能在这里遗漏了一些非常明显的东西。谢谢!
【问题讨论】:
-
您的线程正在竞速。他们都试图读取和更新同一个变量,并且无法保证操作将以什么顺序发生。请参阅en.wikipedia.org/wiki/Race_condition#Example
-
@khelwood:哎呀,错过了 :)
-
@JonSkeet ,
i变量是静态的,所以线程在这里共享变量,对吧? -
答案是:如果你想这样做,请使用 AtomicInteger :)
-
是的,我错过了 - 没有仔细阅读这个问题。道歉。
标签: java multithreading java-threads