黑马程序员技术交流社区

标题: 请教 毕老师java基础11天视频的线程同步问题 [打印本页]

作者: 胡勇敏    时间: 2012-10-24 15:45
标题: 请教 毕老师java基础11天视频的线程同步问题
本帖最后由 huymd1234 于 2012-10-24 16:59 编辑

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

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

error.jpg

作者: 杨志男    时间: 2012-10-24 16:13
注意下你声明锁(Object对象)的位置,它现在可是在方法里声明的啊,局部引用变量啊,run()方法中的局部变量是每个线程都有一份的,这不就是每个线程都有一个自己的锁了么?
作者: 范贞亮    时间: 2012-10-24 16:22
用this 就行饿
作者: 陈家明    时间: 2012-10-24 16:33
Object obj = new Object不应该定义在run方法中,那么每个线程都会new,在这基本上是没加锁。synchronized(obj),每个线程都会判断obj对象的标志位,为开时,此线程可以执行,并将标志位设置为关。其他线程不能进入,就实现同步了。所以obj对象应该定义在成员位置上。
作者: 胡勇敏    时间: 2012-10-24 16:42
杨志男 发表于 2012-10-24 16:13
注意下你声明锁(Object对象)的位置,它现在可是在方法里声明的啊,局部引用变量啊,run()方法中的局部变量 ...

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

谢啦,我搞清楚了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2