java多线程卖票问题。

</pre><pre name="code" class="java">package 卖车票程序;
/*
 * 多线程,cpu来回切换运行程序,就会导致一个问题的出现,一个线程卖票一张刚卖出去还没减一,cpu又切换到另一个线程去了,
 * 会导致这个线程以没减的票为总数开始卖。*/
import 课后作业.test1;
public class TestCpiao extends Thread {
public static int chepiao = 100;// 加static所有对象共享100站票
public static String aa = new String("1");//aa也要设置成静态的。这样才能为公共的,如果aa不是公共的,那么线程就不存在抢了。字符串随意定义定义在函数边
//synchronized的作用是 让他管辖的代码部分,要么全部执行完,要么全部不执行
public void run() {//synchronized修饰函数不需要字符串,相当于默认this
while (true) {
synchronized (aa) {//即可以修饰代码块又可以修饰函数
if (chepiao > 0) {
System.out.println("第" + Thread.currentThread().getName()
+ "车站在卖第" + (101 - chepiao) + "张车票");
--chepiao;
} else {
break;
}
}
}
}
public static void main(String[] args) throws InterruptedException {
TestCpiao testCpiao = new TestCpiao();
testCpiao.start();
TestCpiao testCpiao2 = new TestCpiao();
testCpiao2.start();
}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值