liugy52 2009-03-18 13:25
浏览 207
已采纳

关于线程共享变量的一个问题

我写了这样一个测试程序:Runner是Runnable的实现类,类里面包含一个Object类型的私有变量,想通过这个程序测试看是否类的私有成员在多个线程中是否是共享的。

大多数的输出结果中没有重复的值,但是偶尔会出现相同的结果,不知道我的程序哪里出现问题了? 类的私有变量是不是多个线程共享的?

 

import java.util.ArrayList;
import java.util.List;
public class SharedVariableDemo {
 private static List<Thread> threadList = new ArrayList<Thread>();
 
 public static void main(String[] args) {

  
  for (int i = 0; i < 10; i++) {
   threadList.add(new Thread(new Runner()));
  }
  for (int i = 0; i < 10; i++) {
   Thread t = threadList.get(i);
   t.start();
  }
 }
}
class Runner implements Runnable {
 
 private Object obj = null;
 
 public Runner() {
  synchronized (this) {
   obj = new Object();
  }
 }
 
 public void run() {
  synchronized (this) {
   System.out.println(obj.toString());
  }
 }
}

输出结果:
java.lang.Object@10b30a7
java.lang.Object@89ae9e
java.lang.Object@60aeb0
java.lang.Object@66848c
java.lang.Object@1d58aae
java.lang.Object@de6f34
java.lang.Object@10d448        // 偶尔会出现值相同的情况。
java.lang.Object@10d448        //
java.lang.Object@e0e1c6
java.lang.Object@6ca1c


问题补充:
那么线程类的私有变量需要做同步处理吗?
问题补充:
那么是不是说:每个线程实例都有一个属于自己的私有空间,私有变量都是保存在这个私有空间的?
  • 写回答

10条回答 默认 最新

  • my_asker 2009-03-21 14:20
    关注

    [quote="liugy52"]那么是不是说:每个线程实例都有一个属于自己的私有空间,私有变量都是保存在这个私有空间的? [/quote]

    变量、常量这些东西都是讲究作用域,你可以理解为私有空间,但是jvm是不跟你谈私有空间这东西的,只认作用域。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧