关于#java#的问题:java线程问题

java线程问题

img

img

img


是一个实现runable的接口 大概就是三个窗口卖100张票 用runable 能成功
但是换成继承thread就不行了

img


票就有重的了

lz是想问为什么用runnable行,用继承thread不行,对吧?
原因很简单,用runnable的时候,你的三个线程都是new thread(t1)生成的,也就是三个线程公用一个t1对象,正因为有了公用,才有排他的说法,如果三个线程各用各的,互相没关系,那就不存在排他(也就是同步)问题了
那么好了,来看用继承thread的情况,new出来的三个线程各管各的,互相没有共用的东西,所以不存在排他(同步)问题,所以各自输出自己的东西,就达不到效果。
也就是判断线程需不需要同步,要看这些线程有没有用到共有的信息,如果没有,线程之间根本就没关系,就算你加上同步的代码又有啥意义。

继承Thread,你的总票数n必须是static的,没啥问题,但你的同步方法也要static的哇,不然锁就是this,创建了三个对象,this不唯一,即锁不唯一,压根没同步,出现了重票。
同步方法用static修饰,让锁为t.class。

继承thread什么不行,换成thread,你main方法也不对,new Thread(thread)?要改下