本帖最后由 崔岩 于 2012-3-13 22:11 编辑
你NEW了4个 Ticket, 这样呢,每个对象里都有一个独立的obj ,this指代的也是这个独立的对象,所以你这个写法呢,会出现4个卖票的用的不是一个锁,所以互相之间没有制约。
建议你把Ticket继承runnable, 只new一个Ticket,然后new4个线程,把同一个Ticket传进去。这样就能解决了.
另外想补充几句,面向对象的语言之所以广为接受,不光是我们在设计的时候可以用现实生活中的实体做参照,而且在出现了问题以后,由于设计时是参照现实生活中活生生的事物,所以解决问题的时候更应该思考下在现实生活中,事物是如何运作的,有什么特性。
就像你这个例子,Ticket当做火车票,那它就是对应一个火车的座位数目,而卖票的窗口是有多个。这时候票的数据应该只有一份,并且是排它的(就是有一个窗口在改写这个数据的时候,别的窗口不能访问,否则就会出现一票多卖的情况),如果按照这个思维过程来想,那在设计Ticket类的时候,我们就不会在new出多个Ticket了。 |