A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 huymd1234 于 2012-10-24 16:59 编辑

正在学习毕老师的java基础,学习到线程同步了,跟着毕老师敲的代码 但是运行的结果却不正常 想了半天也没想明白哪里出问题,请教下各位大虾。

error.jpg (107.22 KB, 下载次数: 23)

error.jpg

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
注意下你声明锁(Object对象)的位置,它现在可是在方法里声明的啊,局部引用变量啊,run()方法中的局部变量是每个线程都有一份的,这不就是每个线程都有一个自己的锁了么?

评分

参与人数 1黑马币 +2 收起 理由
高正新 + 2 赞一个!

查看全部评分

回复 使用道具 举报
用this 就行饿
回复 使用道具 举报
Object obj = new Object不应该定义在run方法中,那么每个线程都会new,在这基本上是没加锁。synchronized(obj),每个线程都会判断obj对象的标志位,为开时,此线程可以执行,并将标志位设置为关。其他线程不能进入,就实现同步了。所以obj对象应该定义在成员位置上。
回复 使用道具 举报
杨志男 发表于 2012-10-24 16:13
注意下你声明锁(Object对象)的位置,它现在可是在方法里声明的啊,局部引用变量啊,run()方法中的局部变量 ...

哦,恍然大悟。确实啊 标志位放在run方法内了 我晕。
回复 使用道具 举报
陈家明 发表于 2012-10-24 16:33
Object obj = new Object不应该定义在run方法中,那么每个线程都会new,在这基本上是没加锁。synchronized( ...

谢啦,我搞清楚了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马