</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();
}
}