public class TestThread2 {
static int count = 0;
public static void main(String[] args) {
Thread t = new Thread(new Runnable(){
public void run()
{
for (int i=1; i<=100000; i++) {
count++;
}
}
});
Thread t1 = new Thread(new Runnable(){
public void run()
{
for (int i=1; i<=100000; i++) {
count++;
}
}
});
t.start();
t1.start();
try{
t.join();
t1.join();
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(count);
}
}
上面的代码打印数量,如131938的各种价值观,127518等加入,但我认为它应该总是打印20000加入为后()被调用,主线程不能移到下一个语句,直到当前线程死亡。我知道我在这里错过了一个基本概念,但我无法弄清楚,所以请帮助。Java线程有两个线程和静态变量
'我++'不是原子的。这是Java并发101;去实践中阅读Java Concurrency。 –
通常,您会在[CountDownLatch](https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html)中调用'await()',并从2开始,当每个线程完成时(最终阻止)'countDown()' –
没有多大关系,但为了得到相同的答案,您始终可以设置关联并仅使用一个核心。然后你总是会得到相同的答案。 –