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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关于多线程中共享变量的一个问题
public class SharedVariableDemo implements Runnable {
private Object obj = new Object();
public void run() {
synchronized (this) {
System.out.println(obj.toString());
}
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(new SharedVariableDemo()).start();
}
}
}
测试程序的运行结果如下:
其中有两个线程的输出结果相同,是不是类的实例变量就是多个线程共享的?但是输出中大部分的值又不同呢?我对线程编程方面不太熟悉,希望大家帮我看看。

谢谢!
ng.Object@61de33
ng.Object@530daa
ng.Object@1270b73
ng.Object@66848c
ng.Object@8813f2
ng.Object@1d58aae
ng.Object@1d58aae
ng.Object@e09713
ng.Object@83cc67
ng.Object@de6f34
2个答案按时间排序按投票排序
如果你要共享一个变量,一般应该在启动线程之前创建好它,譬如类变量:static private Object obj = new Object();
在线程中创建的实例变量,当然就是线程专有的了。

toString方法返回的是:
类名@Hashcode
至于那两行相同Hashcode,是因为一个诡异的语句造成的:private Object obj = new Object();
去掉' = new Object();'后应该可以看到所有Hashcode都不相同。

相关文档
最新文档