本帖最后由 袁錦泰 于 2012-5-19 00:44 编辑
- private int tick = 100;
- Object obj = new Object();//将锁对象写到成员位置
- public void run() {
- while (true) {
- synchronized (obj) {
复制代码 首先我要和你再次说明一下同步的前提:
1.具备多个线程
2.使用同一个锁(obj)
你的程序违背了原则中的第二点,每个线程开启后都具备了自己的run()方法,每个run()方法中都有一个局部变量Object obj = new Object();这就表明每个线程都有自己的锁,你开启了四个线程就具备了四把锁,从而导致无法同步.
然后我说一下解决方法:
将Objcet obj = new Oject();语句放在同步run()方法外,因为obj在Ticket t对象中变为成员变量,与tick的属性相同,都变为了被共享的成员,就是这个导致你的线程代码加上同步之后依然无法解决线程安全问题的原因.
最后我要和你强调的是代码的书写格式与标识符的书写规范,类名首字母需要大写,代码格式需要有层次感,其他我就不再赘述了.
不知是否解释的够清楚,如果还不明白就再联系我! |