看书 所谓的同步就是解决多线程之间共享数据,造成的数据更改不同步的问题
用锁的前提
两个线程或以上 用同一个锁 线程共享数据并非一定是要操作同一对象 在我的代码中,虽然是创建了四个线程对象,但是四个线程中都访问了Thread中定义好的静态变量ticketNum,在类中定义的静态变量,不就是类变量,所以 四个线程访问的是同一个共有的数据
因此设计到了安全问题
然后最近看了别人的帖子 发现我我的错误 原来是锁对象出现了问题
只要把 private Object objLock =new Object();在声明处加一个static
也就是private static Object objLock =new Object();
这样这个锁对象 就是类中的成员变量 也就是说 四个线程中的锁对象是同一个
我的错误:锁对象是对象成员变量,我定义了四个线程对象,相应的创建了四个锁对象,
每个对象在访问同步数据,都用了自己的锁,所以才失败了 !! |