分析: 1.票数要使用同一个静态值; 2.为保证不会出现卖出同一个票数,要java多线程同步锁。 3.有一个线程卖这张票时,其他线程要等这张票卖完!
package person.xsc.practice;
public class SaleWindow implements Runnable {
private int ticket = 20;
@Override
public void run() {
while (true) {
if (!saleSuccess()) {
break;
}
}
}
public synchronized boolean saleSuccess() {
if (ticket > 0) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 卖 出 了 " + (ticket--)+ " 号 票 !");
return true;
} else {
return false;
}
}
public static void main(String[] args) {
// 创建销售窗口对象
SaleWindow sw = new SaleWindow();
//让第一个窗口开始买票
new Thread(sw).start();
//让第二个窗口开始买票
new Thread(sw).start();
// 让第三个窗口开始买票
new Thread(sw).start();
}
}
输出:
Thread-0 卖 出 了 20 号 票 !
Thread-0 卖 出 了 19 号 票 !
Thread-0 卖 出 了 18 号 票 !
Thread-0 卖 出 了 17 号 票 !
Thread-2 卖 出 了 16 号 票 !
Thread-2 卖 出 了 15 号 票 !
Thread-2 卖 出 了 14 号 票 !
Thread-1 卖 出 了 13 号 票 !
Thread-1 卖 出 了 12 号 票 !
Thread-1 卖 出 了 11 号 票 !
Thread-2 卖 出 了 10 号 票 !
Thread-0 卖 出 了 9 号 票 !
Thread-0 卖 出 了 8 号 票 !
Thread-2 卖 出 了 7 号 票 !
Thread-2 卖 出 了 6 号 票 !
Thread-1 卖 出 了 5 号 票 !
Thread-1 卖 出 了 4 号 票 !
Thread-1 卖 出 了 3 号 票 !
Thread-1 卖 出 了 2 号 票 !
Thread-2 卖 出 了 1 号 票 !