本帖最后由 曹俊 于 2012-7-24 18:05 编辑
楼主:在这个函数中你用了同步代码块这个方法来解决程序中的安全问题,同步代码块中的锁是任意的对象,所以你创建了Object obj = new obj();但你把这个对象放在了run()方法中,导致上面的th1、th2、th3、th4线程都会创建自己的锁,这时就产生了四把锁,没有起到同步的作用!
而你用this这个对象,指的就是我上面图中第22行的对象,这时这个对象是这四个线程共有的,四个线程使用这个对象就保证了同步代码块中一把锁的效果,能起到同步的作用。
解决办法:将你的Object obj = new Object();放在22行覆盖Ticket t = new Ticket();
或者像我上面为你准备的代码也可以解决,只是我上面的代码中Object obj = new Object();就是一段没用的代码了。
希望可以帮你解决问题哈!
有什么错误,欢迎指正~~~~~!{:soso__8961432591078930798_3:} |
-
2.jpg
(12.19 KB, 下载次数: 67)
-
1.jpg
(59.34 KB, 下载次数: 88)
|