就是线程a下有一个tickets,
线程b下也有一个tickets,
这时庆扰tickets变量为2个。
线程a访问的是a下的tickets,
而线程b访问的是b下的tickets,
所以造成坦差御了出票结果为200张。
为了避免这让岩种情况,需要在声明的时候把他设置成全局变量
也就是前面要加入static修饰
把int tickets=100
修改为public static int tickets=100
这时无论生成几个线程tickets变量只有一个所有的线程同时对他执行 *** 作。
这时就能保证出票数为100张了
很简单, 出票里加锁就行了完整锋野代码:
public class Test {public static void main(String[] args) {
for(int i=0 i<3 i++){
new Thread("线程 " + i){
public void run() {
while(true){
int p = getNumber()
if(p >0 ){
System.out.println(getName() + " 票号: " + p)
}else{
System.out.println("没票了")
break
}
}
}
}.start()
}
}
public static int num = 100 //总票数
/**
* synchronized 同步锁
* @return
*/
public static synchronized int getNumber(){
if(num >0){
return num -- //如果大于0, 银基喊则返回当前锋旅票并减少一张
}
return 0
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)