多线程中static变量的值变化

Moy 发布于 2012/12/23 12:21
阅读 1K+
收藏 0

程序的源代码如下:

import java.util.Random;
public class ThreadTest {

    static int data=0;
 public static void main(String[] args) {

  new Thread(new Runnable(){
   public void run(){
    data=new Random().nextInt();
   System.out.println("first:put in data:"+data);
   new A().get();
   new B().get();   
   }
  }).start();

  new Thread(new Runnable(){
   public void run(){
    data=new Random().nextInt();
   System.out.println("second:put in data:"+data);
   new A().get();
   new B().get();   
   }
  }).start();
  
 }
 static class A{
  public void get(){
   System.out.println("A"+Thread.currentThread().getName()+":  "+data);
  }
 }
 static class B{
  public void get(){
   System.out.println("B"+Thread.currentThread().getName()+":  "+data);
  }
 }

}

下面是一次的执行结果:

second:put in data:-1815393446
first:put in data:-1815393446
AThread-0:  -1815393446
AThread-1:  -1815393446
BThread-0:  -1815393446
BThread-1:  -1815393446

不明白为什么两个线程中输出的data值是一样的?

 

加载中
0
若海
若海

我执行的结果不是一样的哦。

second:put in data:2113394748
AThread-1:  2113394748
BThread-1:  2113394748
first:put in data:1562874617
AThread-0:  1562874617
BThread-0:  1562874617

会不会只是巧合,你有多执行几次么

0
Moy
Moy

可能真的是巧合。。

下次提问会注意点。。

0
xiaoxia
xiaoxia

你这代码就是有问题啊,压根就不是巧合的事。第一线程的run方法将data赋值后还没执行system.out.print(data),这时候线程2的run要是将data再次赋值,那你的上述情况就会出现。(赋值和取值之间存在同步问题)

Moy
Moy
嗯 后来知道问题了 谢谢。。
返回顶部
顶部